Matlab:如何在两个方向上用A的其他值替换矩阵A的某些元素?

时间:2014-07-07 21:36:45

标签: matlab

对于包含1到100之间数字的矩阵A(10x100000),如何在两个方向上用A的其他值互换A的某些元素?

示例:

[47 7 41 1 99 98]和[47 78 41 1 99 98] [5 7 9 18 55 4]取代数字[5 7 9 18 55 4]

3 个答案:

答案 0 :(得分:3)

使用ismember的两个输出:

n1 = [1 2 3]; %// first set of numbers
n2 = [4 5 6]; %// second set of numbers
[v1, i1] = ismember(A,n1);
[v2, i2] = ismember(A,n2);
A(v1) = n2(i1(v1));
A(v2) = n1(i2(v2));

示例:

>> A = randi(8,4,5)
A =
     2     2     8     4     6
     2     5     3     8     2
     5     4     3     2     5
     4     3     2     3     4

转化为

A =
     5     5     8     1     3
     5     2     6     8     5
     2     1     6     5     2
     1     6     5     6     1

答案 1 :(得分:1)

基于

bsxfun 的方法 -

%// Input matrix
A = randi(100,10,10)

vec1 = [5 7 9 18 55 4 , 47 78 41 1 99 98]; %// Numbers to be replaced
vec2 = [47 78 4 1 99 98, 5 7 9 18 55 4]; %// Numbers to be used as replacements

[v1,v2] = max(bsxfun(@eq,A(:),vec1),[],2);
A(find(v1)) = vec2(v2(v1))

示例运行 -

输入A

A =
    27    37    27    59    37    13    55    45    29    16
    84    41    58    46    75    39    75    51    49    16
   100    37    88    87    71    82    85    54    69    16
    65    47     7    67    71    99    17    86    21     9
    71    51    45    36     1    87    91    68    61    46
    94    92     9    35    38     9    11    81    33    67
    69    21    57    26    91    34    75    54    89    84
    57    34    54    96    32    24    73    96    14    80
    39    58    77    30    60    32    72     7    11    72
    64    49    24    16    30    99    14    55    96    48

输出A

A =
    27    37    27    59    37    13    99    45    29    16
    84     9    58    46    75    39    75    51    49    16
   100    37    88    87    71    82    85    54    69    16
    65     5    78    67    71    55    17    86    21     4
    71    51    45    36    18    87    91    68    61    46
    94    92     4    35    38     4    11    81    33    67
    69    21    57    26    91    34    75    54    89    84
    57    34    54    96    32    24    73    96    14    80
    39    58    77    30    60    32    72    78    11    72
    64    49    24    16    30    55    14    99    96    48

可以看出,原始7s中的{4}和(9,8)中的A78s47替换为({1}} 4,2)5

答案 2 :(得分:1)

Matlab是一个奇怪而神秘的地方。通过文档搜索,我在Mapping工具箱中找到了一个名为changem的函数。我从未使用它,但显然如果你有原始矩阵A和两个替换向量v1 and v2

v1 = [ 5  7  9 18 55  4];
v2 = [47 78 41  1 99 98];

您所要做的就是:

B = changem(A, [v1 v2], [v2 v1]);