matlab - 用matlab中的其他值替换矩阵中的索引

标签 matlab matrix matrix-indexing

假设现在我有一个矩阵

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/

相关文章:

python - 具有表面渐变的颜色 matplotlib plot_surface 命令

algorithm - 使用 : system time() 执行 R 代码

matlab - 在 Matlab 中使用 bar3 时如何设置 x 和 y 值?

matrix - crc32_combine() 的矩阵技巧的逆是什么?

c - C 中的动态字符串矩阵

matlab - 为什么 Matlab octave origin awk 中的频率计数对于相同的数据集会得到完全不同的结果?

matlab - 多维矩阵最大值的线性索引 - MATLAB

MATLAB根据第1列条件维护2列

arrays - 基于等价性将值分组在一起

r - 如何将向量中对角线的值插入R中的矩阵?