我从一个numpy数组的numpy数组开始,其中每个内部numpy数组可以有不同的长度。下面给出一个例子:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5])
c = np.array([a, b])
print c
[[1 2 3] [4 5]]
我希望能够对数组c中每个元素的每个元素执行布尔运算,但是当我尝试得到以下值时出错:
print c > 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
我希望能够得到结果:
[[True True True] [True True]]
不使用for循环或迭代外部数组。这是可能的,如果是的话,我该如何实现呢?
答案 0 :(得分:1)
我可以想到两种广泛的方法,既可以填充数组,也可以使用单个2d数组而不是嵌套数组,或者将嵌套数组视为数组列表。第一个看起来像这样:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5, -99])
c = np.array([a, b])
print c.shape
# (2, 3)
print c > 0
# [[ True True True]
# [ True True False]]
或做类似的事情:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5])
c = np.array([a, b])
out = [i > 0 for i in c]
print out
# [array([ True, True, True], dtype=bool), array([ True, True], dtype=bool)]
如果填充不是一个选项,您实际上可能会发现数组列表的行为比数组数组更好。