多维nArray集操作

2024-05-17 00:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要运行两个潜在的大多维numpy.ndarrays的集合差分。
我的测试证明,尝试扩展numpy.setdiff1d以在多维数组中工作而不抛出以下TypeError时失败:

TypeError: Cannot change data-type for object array.

这些数组中的数据是一个长字符串。在

我有以下两个数组:

^{pr2}$

预期的结果是集差S = A - B,这是对((0,d), (2,c), (3,b))。在


Tags: 数据numpy证明fordataobjecttype差分
2条回答

只要要进行集合比较的形状是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')

相关问题 更多 >