Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将数组与数组列表进行比较?_Python_Arrays_Python 3.x_List_Numpy - Fatal编程技术网

Python 如何将数组与数组列表进行比较?

Python 如何将数组与数组列表进行比较?,python,arrays,python-3.x,list,numpy,Python,Arrays,Python 3.x,List,Numpy,假设我有一个包含大量numpyndarray(甚至torch张量)的列表: 现在,如果我要检查数组b是否在集合中(假设我不知道集合中存在哪些数组),那么尝试:b在集合中会抛出以下错误: ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all() 这同样适用于包含数组的元组 解决这个问题的一种方法是做一个列表理解: True in [(b == x).all() for x in collection] 但是,这需要一个for循环,我想知道是否有更“有效”的方法来实

假设我有一个包含大量
numpy
ndarray(甚至
torch
张量)的列表:

现在,如果我要检查数组
b
是否在
集合中(假设我不知道
集合中存在哪些数组
),那么尝试:
b在集合中
会抛出以下错误:

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

这同样适用于包含数组的元组

解决这个问题的一种方法是做一个列表理解:

True in [(b == x).all() for x in collection]

但是,这需要一个
for
循环,我想知道是否有更“有效”的方法来实现这一点?

我会一直使用numpy数组:

将numpy导入为np
a、 b,c=np.random.rand(3,3),np.random.rand(3,3),np.random.rand(3,3)
array=np.dstack([a,b,c])
打印(数组.形状)
# (3, 3, 3)
np.all(数组==b,轴=1).all(轴=1).any()
#真的

您可以沿
轴=0
在一个numpy数组中堆叠任意形状的张量,然后立即将所有剩余轴与
np进行比较。all
(这只是PaulH答案的一个稍微清晰的版本):


非常好的解决方案:)@paulh最后一行给了我错误的答案。也许是np.stack()而不是np.dstack()?你能给我解释一下关键字“axis”到底指的是什么吗?比如,如果它被设置为2,那意味着什么,它到底在比较什么?把它们看作是张量笛卡尔轴的标签。对于矩阵(嵌套数组),轴0==行值,轴1==列值
True in [(b == x).all() for x in collection]
ugly_shaped_tensor_list = [np.random.rand(3,7,5,3) for j in range(10)]
known_tensor = ugly_shaped_tensor_list[1]

# stack all tensors in a single array along axis=0:
tensor_stack = np.stack(ugly_shaped_tensor_list)

# compare all axes except the "list" axis, 0:
matches = np.all(tensor_stack == known_tensor, axis=(1,2,3,4))
# array([False,  True, False, False, False, False, False, False, False, False])
matches.any()
# True