2024-05-17 00:20:55 发布
网友
我需要运行两个潜在的大多维numpy.ndarrays的集合差分。 我的测试证明,尝试扩展numpy.setdiff1d以在多维数组中工作而不抛出以下TypeError时失败:
numpy.ndarrays
numpy.setdiff1d
TypeError
TypeError: Cannot change data-type for object array.
这些数组中的数据是一个长字符串。在
我有以下两个数组:
预期的结果是集差S = A - B,这是对((0,d), (2,c), (3,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')])
您可以在这里使用Python的set操作:
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')
只要要进行集合比较的形状是1d,就使用结构化数组(这里是这样的,因为您有一个有效的1d对数组):
您可以在这里使用Python的set操作:
相关问题 更多 >
编程相关推荐