В настоящее время я достижение этой цели, как так:Условная Замены переменных в матрице в Matlab
b = a;
b(b > 0) = 1;
b(b < 0) = -1;
Это работает, но кажется мне безвкусным. Наверняка есть лучший способ сделать это? Один лайнер?
В настоящее время я достижение этой цели, как так:Условная Замены переменных в матрице в Matlab
b = a;
b(b > 0) = 1;
b(b < 0) = -1;
Это работает, но кажется мне безвкусным. Наверняка есть лучший способ сделать это? Один лайнер?
b=sign(a);
например?
Это должно сделать то же самое.
Ответ Андера - это тот, с которым я бы пошел здесь. Вот еще один, как умственное упражнение. Вы можете достичь того же с помощью операторов logical
:
b = (a > 0) - (a < 0);
Элегантность приведенного выше выражения таково, что при любом значении a
кроме 0, только одна часть уравнения является «на» в любой момент времени. Если любое значение a
положительно, то выход будет logical
true
, так как левая часть уравнения активируется, а правая сторона - нет. Аналогично, если любое значение a
отрицательно, правая часть уравнения активируется, а также вычисляется до true
, а на левой стороне нет. В правой части есть отрицательный знак, поэтому он сливается в -1. Это в сочетании с левой стороной все коалесцирует до точной матрицы double
, таким образом, завершает наш выход. Также разумно изучить, какое выражение дает вам, когда любое значение a
равно 0. Поскольку ни одно из выражений не активируется, это оценивается как false
для обоих выражений, а false - false
объединяется в 0, что является желаемым результатом.
>> a = -2:0.5:2
a =
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
>> b = (a > 0) - (a < 0)
b =
-1 -1 -1 -1 0 1 1 1 1
Ух ты, NVM :) Going сидеть в углу сейчас и плакать. –