Arrays 由两个数组的并集和替换生成matlab数组
我有两个大的数组,我将用下面的例子来说明 第一个数组是:Arrays 由两个数组的并集和替换生成matlab数组,arrays,matlab,Arrays,Matlab,我有两个大的数组,我将用下面的例子来说明 第一个数组是: [ 1 21; 3 4; 4 12; 5 65 ]; 第二个数组B是: [ 3 56; 5 121]; 我希望获得最终的数组C,如下所示: [ 1 21; 3 56; 4 12; 5 121 ]; i、 e.可用时,将A的第二列替换为B的元素 我正在使用Matlab2007。Matlab解决方案 与- 或用于替换ismember- [is_present,pos] = max(bsxfun(@eq,A(:
[ 1 21;
3 4;
4 12;
5 65 ];
第二个数组B是:
[ 3 56;
5 121];
我希望获得最终的数组C,如下所示:
[ 1 21;
3 56;
4 12;
5 121 ];
i、 e.可用时,将A的第二列替换为B的元素
我正在使用Matlab2007。Matlab解决方案 与- 或用于替换
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
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]])
奖励:NUMPY/PYTHON解决方案 您可以使用
布尔索引
-
样本运行-
>> 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
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]])
对不起,我没有这个功能。您能为Matlab 2007提供一个代码吗。@user1243255抱歉,没有正确读取标记,使用Matlab代码编辑。即将请求您,只是不要为Numpy转储Matlab:P@SanthanSalai嗯,numpy是一个有趣的尝试,那里的人们非常关心性能,这对我来说很有意义:)