Python 包含np.array的元组的成员测试
我试图测试包含标量元组和np.array的列表/元组中的成员资格。它适用于规则数组,但不适用于np数组。下面的第一个print语句打印“True”,第二个语句引发一个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
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