当前位置:  开发笔记 > 编程语言 > 正文

Numpy - 总结一个向量列表

如何解决《Numpy-总结一个向量列表》经验,为你挑选了1个好方法。

我试图在列表中总结一个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])),但没有成功.这样做的正确方法是什么?谢谢!



1> Mike Müller..:

解决方案1 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将尺寸减小一.

解决方案2 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

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有