Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 由两个数组的并集和替换生成matlab数组_Arrays_Matlab - Fatal编程技术网

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是一个有趣的尝试,那里的人们非常关心性能,这对我来说很有意义:)