我需要运行两个可能较大的多维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')])