假设现在我有一个矩阵
S = [1 1 1 2 2 2;
1 1 1 2 2 2;
2 2 2 2 1 1;
2 2 2 2 1 1;
2 2 2 2 1 1]
还有另一个矩阵
A = [1 2;
2 4]
A中的第一行是S的唯一索引,第二行是第一行中的值将被替换的值。即S中所有的“1”都会被2代替,所有的“2”都会被4代替。最后得到一个矩阵
SS = [2 2 2 4 4 4;
2 2 2 4 4 4;
4 4 4 4 2 2;
4 4 4 4 2 2;
4 4 4 4 2 2]
现在我正在做的是:
SS = zeros(size(S));
for i = 1:size(A,2)
SS(S==index(A(1, i)) = A(2,i);
end
现在,我有一个相当大的矩阵,使用 for 循环有点慢。有更快的方法吗?
最佳答案
使用 ismember
的第二个输出为您提供 A 的第 1 行中的值的索引。使用这些索引直接创建矩阵 SS
。
示例(为清楚起见更改了初始值):
S = [5 5 5 3 3 3; 5 5 5 3 3 3; 3 3 3 3 5 5; 3 3 3 3 5 5; 3 3 3 3 5 5]; A = [5 3; 2 4];
>> [~, Locb] = ismember(S,A(1,:))
Locb =
1 1 1 2 2 2
1 1 1 2 2 2
2 2 2 2 1 1
2 2 2 2 1 1
2 2 2 2 1 1
>> SS = reshape(A(2,Locb),size(S))
SS =
2 2 2 4 4 4
2 2 2 4 4 4
4 4 4 4 2 2
4 4 4 4 2 2
4 4 4 4 2 2
关于matlab - 用matlab中的其他值替换矩阵中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12439844/