我需要运行两个可能较大的多维numpy.ndarrays的集合差。
我的测试已证明尝试扩展numpy.setdiff1d以使其适用于多维数组而不抛出以下TypeError失败:

TypeError: Cannot change data-type for object array.


这些数组中的数据很长而且很字符串。

我有以下两个数组:

A = [[0L 'a']
     [2L 'c']
     [1L 'b']
     [3L 'b']
     [0L 'd']]

B = [[1L 'b']
     [0L 'a']
     [4L 'b']]


预期结果是设置差S = A - B,它们是对((0,d), (2,c), (3,b))

最佳答案

只要您要进行集合比较的形状是1d,就使用结构化数组(这里是,因为您有一个有效的1d对数组):

A = np.array([(0L, 'a'),
              (2L, 'c'),
              (1L, 'b'),
              (3L, 'b'),
              (0L, 'd')], dtype=[('n', long), ('l', 'S1')])

B = np.array([(1L, 'b'),
              (0L, 'a'),
              (4L, 'b')], dtype=[('n', long), ('l', 'S1')])

S = np.setdiff1d(A, B)

>>> S
array([(2L, 'c'), (3L, 'b'), (0L, 'd')],
      dtype=[('n', '<i8'), ('l', 'S1')])

09-25 15:13