对数组进行分类

时间:2014-07-15 12:08:24

标签: python numpy

例如我有这个清单:

A = [(1, 2.5), (2, 5.0), (3, 7.5), (4, 10.0)]

我有另一个列表,其中包含以下条目:

B = [2.5, 7.5, 12.5]

我想要的是Python中的一个程序,如果A中每个元组的第二个元素,即2.55.07.5和{{1} },可以在10.0中找到,它将创建另一个看起来像这样的变量:

B

删除C = [(1, 2.5), (3, 7.5)] 中第二个元素不在A中的其他元组。我试着用这种方式编码:

B

但我收到了错误:

  

ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

2 个答案:

答案 0 :(得分:2)

为什么不简单地说明以下内容:

>>> A = [(1,2.5), (2,5.0), (3,7.5), (4,10.0)]
>>> B = [2.5, 7,5, 12.5]
>>> C = [a for a in A if a[1] in B]
>>> C
[(1, 2.5), (3, 7.5)]

答案 1 :(得分:2)

您可以使用np.n1d来确定A[:, 1]中的哪些值也在B中:

In [104]: A = np.array([(1,2.5), (2,5.0), (3,7.5), (4,10.0)])

In [105]: B = [2.5, 7.5, 12.5]

In [106]: mask = np.in1d(A[:, 1], B)

In [107]: mask
Out[107]: array([ True, False,  True, False], dtype=bool)

In [108]: A[mask]
Out[108]: 
array([[ 1. ,  2.5],
       [ 3. ,  7.5]])