Numpy比较不相等的行并使两个数组具有相同的维度

时间:2015-07-22 15:42:03

标签: python arrays numpy

a=   
[[43655,    1428,     0, 2554]      
[44580,  1428,     0,  2555]  
[44930,  1428,     0,  2556]  
[47708,  1428,     0,  2557]]     
b=   
[[41641,  1428,     0, 2554]  
[44075,  1428,     0,  2555]  
[44901,  1428,     1,  2556]  
[45377,  1428,     0,  2557]  
[48056,  1428,     0,  2558]]


New  b= 
[[41641,  1428,     0, 2554]  
[44075,  1428,     0,  2555]  
[44901,  1428,     1,  2556]  
[45377,  1428,     0,  2557]  

我有两个不等行的numpy数组。例如。数组a有4行,而数组b有5行 编辑:数组中的行数' b'大于数组' a'。 [:,3]的每个元素都在b [:,3]中。是否有任何函数只提取b [:,3] = a [:,3]

的数组b的行

3 个答案:

答案 0 :(得分:1)

您可以通过执行a[:-1]

来省略数组的最后一个元素

因此,您可以通过执行省略数组的最后一行;

a[:,3] 
b[:-1,3]

答案 1 :(得分:1)

您可以在列表推导中使用zipnp.equal比较第3列的元素,然后将结果转换为numpy数组,并从数组b获取所需的行。

>>> b[np.array([np.equal(*I) for I in zip(a[:,3],b[:,3])])]
array([[41641,  1428,     0,  2554],
       [44075,  1428,     0,  2555],
       [44901,  1428,     1,  2556],
       [45377,  1428,     0,  2557]])

如果订单对您不重要,您可以使用np.in1d

>>> b[np.in1d(b[:,3],a[:,3])]
array([[41641,  1428,     0,  2554],
       [44075,  1428,     0,  2555],
       [44901,  1428,     1,  2556],
       [45377,  1428,     0,  2557]])

>>> a=np.array([[100, 1], [101, 4], [106, 6], [104, 10]])
>>> b= np.array([[ 1, 1], [ 2, 2], [ 3, 3], [ 4, 4], [ 5, 5], [ 6, 6], [ 7, 7], [ 8, 8], [ 9, 9], [10, 10]])
>>> 
>>> b[np.in1d(b[:,1],a[:,1])]
array([[ 1,  1],
       [ 4,  4],
       [ 6,  6],
       [10, 10]])

答案 2 :(得分:0)

如果您不知道ba长多少,那么您可以使用

b[:a.shape[0]]

这将获取足够的b行以与a进行比较。

所以要抓住你的例子中的特定列,它将是

b[:a.shape[0], 3]

此技术甚至可以在另一个方向上工作(如果b小于a)。