我试图在列表中总结一个NumPy向量列表.(在这个例子中,它是2个项目的列表,但在我的情况下,列表可以是任何大小.)如何将它们加入到新的向量中?
a = np.array([100, 100]) b = np.array([200, 200]) my_list = [a, b] ab = np.add(my_list)
np.add(a, b)
工作,但它不是一个列表.我已经尝试过np.add(*my_list)
和np.add(np.array(my_list))
,以及np.add(np.array([my_list]))
,但没有成功.这样做的正确方法是什么?谢谢!
np.add.reduce()
您可以使用以下reduce
属性np.add
:
a = np.array([100, 100]) b = np.array([200, 200]) c = np.array([1000, 2000]) L = [a, b, c] np.add.reduce(L)
结果是:
array([1300, 2300])
所有带有两个in-arguments的通用函数都有一个reduce
属性,它适用于这个函数reduce
,即:
np.add.reduce(L)
变为:
np.add(np.add(L[0], L[1]), L[2])
np.add
如果列表L
变大,则添加更多括号和适当的调用.
来自文档:
文档字符串:
reduce(a, axis=0, dtype=None, out=None, keepdims=False)
a
通过沿一个轴应用ufunc将尺寸减小一.
np.sum()
或者,您可以np.sum
沿第一轴使用:
>>> np.sum(L, axis=0) array([1300, 2300
两者的表现似乎都是一样的.
对于小型阵列:
a = np.array([100, 100]) b = np.array([200, 200]) c = np.array([1000, 2000]) L = [a, b, c, a, b, c, a, b, c]
reduce
有点快:
%timeit np.sum(L, axis=0) 10000 loops, best of 3: 20.7 µs per loop %timeit np.add.reduce(L) 100000 loops, best of 3: 15.7 µs per loop
对于大型阵列:
size = int(1e6) a = np.random.random(size) b = np.random.random(size) c = np.random.random(size) L = [a, b, c, a, b, c, a, b, c]
没有区别:
%timeit np.sum(L, axis=0) 10 loops, best of 3: 41.5 ms per loop %timeit np.add.reduce(L) 10 loops, best of 3: 41.9 ms per loop