对于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)中的78s
和47
替换为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]);