我有一个矩阵100x50。我想要做的是更改值>>的单元格。 0到0,以及值为0到1的单元格。我知道它很简单,但如果有人可以请不要循环建议如何做。
答案 0 :(得分:4)
iiPos = M>0;
iiZeros = M==0;
M(iiPos) = 0;
M(iiZeros) = 1;
答案 1 :(得分:4)
如果只有非负数,这是使用logical not的一种巧妙的方法:
M =
1 2 0 2
2 1 2 2
0 1 2 1
1 0 1 2
M = ~M;
M =
0 0 1 0
0 0 0 0
1 0 0 0
0 1 0 0
如果你也有负数,那么:
M =
0 -1 0 3
-3 0 -1 0
0 -2 0 1
1 0 -1 1
M(M >= 0) = ~M(M >= 0)
M =
1 -1 1 0
-3 1 -1 1
1 -2 1 0
0 1 -1 0
答案 2 :(得分:2)
为什么这么复杂?
M = (M == 0);
为此,零必须精确为零。如果它们只是大约为零,请使用
M = (abs(M) < eps);
答案 3 :(得分:0)
sizeMat = size(mat); % Obtain the size of the matrix
final = zeros(sizeMat); % Create a zero full matrix.
idxZero = find(Mat == 0); % Find where = 0;
final(idxZero) = 1; % switch to 1.
答案 4 :(得分:0)
对于带负数的一般情况:
A = A.*(A<0) + (A==0);