Python 包含np.array的元组的成员测试

Python 包含np.array的元组的成员测试,python,numpy,Python,Numpy,我试图测试包含标量元组和np.array的列表/元组中的成员资格。它适用于规则数组,但不适用于np数组。下面的第一个print语句打印“True”,第二个语句引发一个ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all() 我可以通过手动将每个元组的成员转换为常规列表而不是np.Array来解决这个问题: nplil_work_around = nplil[0],nplil[1].tolist(),nplil[2].tolist() nphuge_work_aro

我试图测试包含标量元组和np.array的列表/元组中的成员资格。它适用于规则数组,但不适用于np数组。下面的第一个print语句打印“True”,第二个语句引发一个
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

我可以通过手动将每个元组的成员转换为常规列表而不是np.Array来解决这个问题:

nplil_work_around = nplil[0],nplil[1].tolist(),nplil[2].tolist()
nphuge_work_around = [(x[0],x[1].tolist(), x[2].tolist()) for x in nphuge]

print nplil_work_around in nphuge_work_around # prints True
有没有一种方法可以在不转换np.数组的情况下执行此操作?

您可以使用以下方法:

any( all((np.all(f==s) for f, s in zip(nplil, nphuge[i]))) for i in range(len(nphuge)) )
逐步:

>>> nphuge = [(5.0, np.array([[ 3., -1.],
       [-1.,  2.]]), np.array([ 7.,  5.])), (2.0, np.array([[ 2.,  1.],
       [ 1.,  1.]]), np.array([-2.,  5.])), (2.0, np.array([[ 1.,  0.],
       [ 0.,  2.]]), np.array([ 0.,  1.])), (1.0, np.array([[ 0.2,  0.1],
       [ 0.1,  1. ]]), np.array([-3.,  4.]))]
>>> nplil = (2.0, np.array([[ 1.,  0.],
       [ 0.,  2.]]), np.array([ 0.,  1.]))

In [54]: [np.all(f==s) for f, s in zip(nplil, nphuge[0])]
Out[54]: [False, False, False]

In [55]: [np.all(f==s) for f, s in zip(nplil, nphuge[1])]
Out[55]: [True, False, False]

In [56]: [np.all(f==s) for f, s in zip(nplil, nphuge[2])]
Out[56]: [True, True, True]

>>> [ all((np.all(f==s) for f, s in zip(nplil, nphuge[i]))) for i in range(len(nphuge)) ]
[False, False, True, False]
>>> any( [ all((np.all(f==s) for f, s in zip(nplil, nphuge[i]))) for i in range(len(nphuge)) ] )
True
>>> nphuge = [(5.0, np.array([[ 3., -1.],
       [-1.,  2.]]), np.array([ 7.,  5.])), (2.0, np.array([[ 2.,  1.],
       [ 1.,  1.]]), np.array([-2.,  5.])), (2.0, np.array([[ 1.,  0.],
       [ 0.,  2.]]), np.array([ 0.,  1.])), (1.0, np.array([[ 0.2,  0.1],
       [ 0.1,  1. ]]), np.array([-3.,  4.]))]
>>> nplil = (2.0, np.array([[ 1.,  0.],
       [ 0.,  2.]]), np.array([ 0.,  1.]))

In [54]: [np.all(f==s) for f, s in zip(nplil, nphuge[0])]
Out[54]: [False, False, False]

In [55]: [np.all(f==s) for f, s in zip(nplil, nphuge[1])]
Out[55]: [True, False, False]

In [56]: [np.all(f==s) for f, s in zip(nplil, nphuge[2])]
Out[56]: [True, True, True]

>>> [ all((np.all(f==s) for f, s in zip(nplil, nphuge[i]))) for i in range(len(nphuge)) ]
[False, False, True, False]
>>> any( [ all((np.all(f==s) for f, s in zip(nplil, nphuge[i]))) for i in range(len(nphuge)) ] )
True