2016-11-16 1 views

ответ

3

b=sign(a); например?

Это должно сделать то же самое.

+1

Ух ты, NVM :) Going сидеть в углу сейчас и плакать. –

2

Ответ Андера - это тот, с которым я бы пошел здесь. Вот еще один, как умственное упражнение. Вы можете достичь того же с помощью операторов logical:

b = (a > 0) - (a < 0); 

Элегантность приведенного выше выражения таково, что при любом значении a кроме 0, только одна часть уравнения является «на» в любой момент времени. Если любое значение a положительно, то выход будет logicaltrue, так как левая часть уравнения активируется, а правая сторона - нет. Аналогично, если любое значение 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