【发布时间】:2018-12-18 23:14:00
【问题描述】:
我正在使用 Python 和 numpy,其中有几个相同形状的 numpy 数组,我正在尝试创建这些数组的联合。这些数组只包含 0 和 1,基本上我想使用 OR 操作将它们合并到一个新数组中。所以,我做了以下事情:
import numpy as np
segs = list()
a = np.ones((10, 10)).astype('uint8')
b = np.zeros((10, 10)).astype('uint8')
segs.append(a)
segs.append(b)
mask = np.asarray([any(tup) for tup in zip(*segs)]).astype('uint8')
最后一句我得到了错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
如果我使用np.any,不知何故我的数组形状现在只是(10,)。如何在不显式循环数组的情况下创建此合并?
编辑
mask = np.asarray([any(tup) for tup in zip(segs)]).astype('uint8')
也会导致同样的错误。
【问题讨论】:
-
a | b怎么样? -
是的,但理论上我可以有很多数组。我这样做是为了创建一个简单的可重现程序。大小也可能只在运行时才知道
-
那么
np.logical_or.reduce((a, b))呢?您当前的代码在每次迭代中对两个 NumPy 数组的元组调用any,这显然是行不通的。 -
啊啊啊……这行得通!你想把它写成答案吗?
-
Python 逻辑运算符不适用于 numpy 数组(
if、or、any等)。像|、np.any这样的 Numpy 更好。