我需要运行两个可能很大的多维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))
对。
答案 0 :(得分:1)
使用结构化数组,只要你进行设置比较的形状是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')])
答案 1 :(得分:0)
您可以在此处使用Python的设置操作:
In [66]: s = set(tuple(x) for x in A).difference(tuple(x) for x in B)
In [67]: np.array(list(s))
Out[67]:
array([['0', 'd'],
['2', 'c'],
['3', 'b']],
dtype='|S1')