【问题标题】:Compare numpy arrays of different shapes, row wise, delete same values?比较不同形状的numpy数组,逐行删除相同的值?
【发布时间】:2019-11-11 11:28:03
【问题描述】:

例如比较两个不同形状的数组:

a:
([[1,2],
[3,4],
[5,6],
[7,8],
[9,10]])

b:
([[3,4],
[5,6]])

c = a -b

预期输出:

c:
([[1,2],
[7,8],
[9,10]])

到目前为止,我尝试过的通常会导致: 操作数不能与形状一起广播 (21,2) (5,2)

【问题讨论】:

标签: python arrays numpy matrix compare


【解决方案1】:

numpy 有一个setdiff1d function,问题是它破坏了数组(所以它们变成了 1d),结果也是 1d。

通过使用 .view 的一个小技巧,我们可以让 numpy 认为您的数组已经是 1d 的,带有元组元素,然后使用 setdiff1d 并在之后对其进行整形。

试试这个:

import numpy as np

a = np.array([[1, 2],
              [3, 4],
              [5, 6],
              [7, 8],
              [9, 10]])

b = np.array([[3, 4],
              [5, 6]])

a_rows = a.view([('', a.dtype)] * a.shape[1])
b_rows = b.view([('', b.dtype)] * b.shape[1])

c = np.setdiff1d(a_rows, b_rows).view(a.dtype).reshape(-1, a.shape[1])

print(c)

输出:

[[ 1  2]
 [ 7  8]
 [ 9 10]]

【讨论】:

    猜你喜欢
    • 2020-11-21
    • 2019-07-24
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多