0

我有一个数组,我想根据“索引数组”更改某些列中的值。

假设我有一个数组A,其中第 1 列和第 2 列中的值将根据switch_mat下面的矩阵进行切换。

A(:,[1 2]) =         
 1     2    
 2     6
 2     7
 6     7
 7    12
 7    13
12    13

switch_mat =
 1     1
 2     2
 6     3
 7     4
12     5
13     6

是否可以在没有循环的情况下使用类似这样的功能来做到这一点?

A(:,[1 2]) = renum(A(:,[1 2]),switch_mat)

新的 A 矩阵将是:

A(:,[1 2]) = 
 1     2    
 2     3
 2     4 
 3     4
 4     5
 4     6
 5     6

谢谢!

编辑: A 矩阵中的开关将是:

1  -> 1
2  -> 2
6  -> 3
7  -> 4
12 -> 5
13 -> 6   % 13 becomes a 6, because they are in the same row of switch_mat

的维度switch_mat = length(unique(A))

4

1 回答 1

2

这是一个可能的解决方案arrayfun

A = arrayfun(@(x)switch_mat(switch_mat(:, 1) == x, 2), A);

或者,您可以使用ismember

[tf, loc] = ismember(A, switch_mat(:, 1));
A(loc > 0) = switch_mat(loc(loc > 0), 2);

我相信后一种方法应该更快。

于 2013-05-25T14:22:11.200 回答