此代码生成一个矩阵 n m,其中 3 和 -3 交替出现
n = 4;
m = 6;
M = zeros(m,n);
M(:,1) = 3*((-1).^(0:m-1).');
for ii = 2:n
M(:,ii) = (-1)^(ii+1)*M(:,1)
end
n=4 m=6 的结果
3 -3 3 -3
-3 3 -3 3
3 -3 3 -3
-3 3 -3 3
3 -3 3 -3
-3 3 -3 3
现在,我尝试以这种方式将 3 替换为 0,将 -3 替换为 1:
M(M==3) = 0
M(M==-3) = 1
但是我没有得到我需要的东西,因为结果如下:
0 1 0 0
1 0 1 -1
0 1 0 0
1 0 1 -1
0 1 0 0
1 0 1 -1
如何实现3替换0、-3替换1?
最佳答案
一种方法:
M = (sign(M) + 1)/2
另一个:
M = ~(M - 3)
但是你的想法对我来说也很有效,你确定你复制正确了吗?
M(M== 3) = 0
M(M==-3) = 1
没有理由它不起作用。除了你如何生成它。所以可能会出现浮点问题。因此,为了确保安全,请首先执行以下操作:
M = round(M)
无需循环即可生成矩阵的另一种方法可能是:
M = 3* bsxfun(@(x,y) 2*(~mod(x+y,2)-1/2),(1:m)',1:n)
关于matlab - 替换矩阵中的特定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29819068/