matlab - 替换矩阵中的特定数字

标签 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

现在,我尝试以这种方式将 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/

相关文章:

matlab - 在 matlab 中绘制短时傅里叶变换(注意窗口大小和步长)

matlab - 如何在 matlab 输出的颜色条上添加标题?

c++ - 有没有办法在opencv c++中检查矩阵中的数据

Matlab类方法错误

Matlab - 可选的句柄参数首先用于类似函数的绘图

python - 在 NumPy 中转置存储在一维数组中的矩阵的最快方法?

R 的 `chol` 与 MATLAB 的 `cholcov` 不同。如何进行类似 Cholesky 的协方差分解?

matlab - colMin 和 colMax 之间的行元素总和,每行具有不同的 colMin 和 colMax - Octave/Matlab

python - 如何找到向量化矩阵 numpy 的索引

用于物理仿真的 3D 图形 C++ 或 MATLAB 库