Matlab не может быть установлен в минус, -1
Я хочу заменить определенные значения в матрице / векторе на -1, но не могу этого сделать.
x = [1 5 6; 2 4 3; 3 4 2; 4 2 1];
z = x(:,1) == 4 % get result I want
z =
0
0
0
1
changem(z,-1,0) % changem doesn't work
ans =
1
1
1
1
то же самое, если я сделаю массив в changem
changem(z,[-1 1],[0 1])
ans =
1
1
1
1
Это тоже не работает
z(1) = -1
z =
1
0
0
1
Почему я не могу манипулировать вектором, чтобы получить следующие значения
ans =
-1
-1
-1
1
Этот подход работает, но ответ на предыдущий вопрос был бы отличным, спасибо.
z = x(:,1) ~= 4;
z = z * -1;
z = changem(z,1,0)
ans =
-1
-1
-1
1
2 ответа
Логическая операция возвращает значения из двоичного набора {0, 1}. если вы хотите, чтобы это было {-1, +1}, одно простое преобразование - умножить на 2, а затем вычесть на единицу.
z = (x(1, :) == 4)*2 - 1
Я понятия не имею что changeme
и поэтому не может комментировать результаты этой функции.
В Matlab и различных средах (например, C, C++) ноль оценивается как логическое ложь, а все, кроме нуля, оценивается как логическое истина. Например, в Matlab, logical(x)
преобразует двойной массив x
в двоичный / логический массив. logical(-1)
оценивается в 1 (т.е. верно). Если z
является логическим массивом, и вы делаете назначение:
z(1) = -1;
Что происходит, двойной -1
преобразуется в двоичное значение, которое true
(т. е. 1), поскольку все, кроме 0, преобразуется в true 1. Затем 1 присваивается первому индексу z
, Все работает как надо.