替换矩阵中的特定数字

时间:2015-04-23 09:21:30

标签: matlab matrix

此代码生成矩阵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

现在,我试图以这种方式将0替换为3,将-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

如何用0和-3替换3?

1 个答案:

答案 0 :(得分:2)

一种方式:

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)