我有两个大型数组,我将使用以下示例进行说明。
第一个数组A是:
[ 1 21;
3 4;
4 12;
5 65 ];
第二个数组B是:
[ 3 56;
5 121];
我想获得最终的数组C如下:
[ 1 21;
3 56;
4 12;
5 121 ];
即。在可用时用B的元素替换A的第二列。
我正在使用Matlab 2007。
答案 0 :(得分:2)
MATLAB解决方案
使用ismember
-
C = A;
[is_present,pos] = ismember(A(:,1),B(:,1))
C(is_present,2) = B(pos(is_present),2)
或使用bsxfun
替换ismember
-
[is_present,pos] = max(bsxfun(@eq,A(:,1),B(:,1).'),[],2);
示例运行 -
>> A,B
A =
1 21
3 4
4 12
5 65
B =
3 56
5 121
4 66
>> C = A;
[is_present,pos] = ismember(A(:,1),B(:,1));
C(is_present,2) = B(pos(is_present),2);
>> C
C =
1 21
3 56
4 66
5 121
奖励:NUMPY / PYTHON解决方案
您可以将boolean indexing
与np.in1d
-
import numpy as np
mask = np.in1d(A[:,0],B[:,0])
C = A.copy()
C[mask] = B
示例运行 -
In [34]: A
Out[34]:
array([[ 1, 21],
[ 3, 4],
[ 4, 12],
[ 5, 65]])
In [35]: B
Out[35]:
array([[ 3, 56],
[ 5, 121]])
In [36]: mask = np.in1d(A[:,0],B[:,0])
...: C = A.copy()
...: C[mask] = B
...:
In [37]: C
Out[37]:
array([[ 1, 21],
[ 3, 56],
[ 4, 12],
[ 5, 121]])