[英]Numpy - summing up a list of vectors
我試圖在列表中總結一個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()
您可以使用np.add
的reduce
屬性:
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])
如果列表L
變大,則添加更多括號和相應的np.add
調用。
來自文檔:
文檔字符串:
reduce(a, axis=0, dtype=None, out=None, keepdims=False)
通過沿一個軸應用ufunc將
a
的維數減1。
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
你是這個意思嗎?
import numpy as np
a = np.array([100, 100])
b = np.array([200, 200])
my_list = [a, b]
# add them up "vertically"
print np.vstack(my_list).sum(axis=0)
print np.vstack(tuple(my_list)).sum(axis=0) # I thought it had to be a tuple but apparently not!
[300 300]
[300 300]
你可以使用np.hstack
或np.concatenate
:
l = [a, b]
In [560]: np.hstack(l)
Out[560]: array([100, 100, 200, 200])
In [561]: np.concatenate(l)
Out[561]: array([100, 100, 200, 200])
可能是減少的理想候選人
>>> a = np.array([100, 100])
>>> b = np.array([200, 200])
>>> c = np.array([300, 300])
>>> reduce(lambda x,y: np.add(x,y), [a,b,c])
array([600, 600])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.