对于包含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]
答案 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)中的A
被78s
和47
替换为({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]);