将矩阵中的值替换为其他值

use*_*969 13 matlab matrix

我有一个整数矩阵,我需要用-5替换2的所有外观.最有效的方法是什么?我按照下面的方式制作,但我相信有更优雅的方式.

a=[1,2,3;1,3,5;2,2,2]
ind_plain = find(a == 2)
[row_indx col_indx] = ind2sub(size(a), ind_plain)
for el_id=1:length(row_indx)
    a(row_indx(el_id),col_indx(el_id)) = -5;
end
Run Code Online (Sandbox Code Playgroud)

而不是循环II寻找类似的东西:a(row_indx,col_indx)= -5,这是行不通的.

And*_*ein 26

find在这种情况下不需要.改为使用逻辑索引:

a(a == 2) = -5
Run Code Online (Sandbox Code Playgroud)

在搜索矩阵是否相等的情况下,inf您应该使用

a(isinf(a)) = -5

一般情况是:

Mat(boolMask) = val

Mat你的矩阵在哪里 ,boolMask是另一个logical值矩阵,是val赋值


Mar*_*n B 13

试试这个:

a(a==2) = -5;
Run Code Online (Sandbox Code Playgroud)

版本稍长一些

ind_plain = find(a == 2);
a(ind_plain) = -5;
Run Code Online (Sandbox Code Playgroud)

换句话说,您可以使用线性索引直接索引矩阵,无需使用它们进行转换ind2sub- 非常有用!但如上所示,如果使用布尔矩阵索引矩阵,则可以更短.

顺便说一下,如果(通常情况下)你不想将语句的结果转储到控制台,你应该在你的语句后面加分号.