我有一个不同形状的ndarray列表,例如形状(3072, 128), (128,), (128, 64)
。
并非巧合,前一个数组的最后一个维度与后一个数组的第一个维度相匹配 - 如果这有任何帮助。
我想使用numpy来计算所有数组的总体最大值(所以只有一个标量)。但是,numpy.amax(my_list)
会返回
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我知道我可以通过使用明确的for
循环来避免这个问题,比如
for arr in my_list:
max_so_far = numpy.amax(arr)
...
但如果可能的话,我想利用numpy的广播/矢量化功能。有没有办法实现这个目标?
答案 0 :(得分:2)
我会用:
maximum = max(arr.max() for arr in my_list)
最多的工作将在每个arr.max()调用中完成,这在numpy内部进行了很好的优化,并且Python max的上限时间(在单个数组的最大值上计算)可以忽略不计(假设数字可以忽略不计)数组中元素的数量明显大于数组的总数。
任何试图挤压+连接数组的尝试(最终只能进行一些numpy max调用)都会导致性能下降。
答案 1 :(得分:0)
l = [(3072, 128), (128, ), (128, 64)]
a = np.array(l, dtype=object)
print np.amax(np.amax(a))
# 3072