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



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

的例子:

将数字[5 7 9 18 55 4]替换为[47 78 41 1 99 98],将数字[47 78 41 1 99 98]替换为[5 7 9 18 55 4]

使用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

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 =
    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 =
    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

可以看出,原A中(4,3)和(9,8)中的7s被(4,2)中的78s47替换为5

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]);

最新更新