[i*matrix for i in arr] # list of matrices
以上列表是矩陣列表,因此當您使用sum時,它將添加數組。
In [6]: matrix = np.array([[1,2],[3,4]])
In [7]: matrix
Out[7]:
array([[1, 2],
[3, 4]])
In [9]: [i * matrix for i in (2,4,8)]
Out[9]:
[array([[2, 4],
[6, 8]]), array([[ 4, 8],
[12, 16]]), array([[ 8, 16],
[24, 32]])]
請查看幫助np.sum
File: /home/ale/.virtualenvs/ml/local/lib/python2.7/site-packages/numpy/core/fromnumeric.pyaxis=None, dtype=None, out=None, keepdims=False) Docstring: Sum of array elements over a given axis.
Parameters
---------- a : array_like
Elements to sum. axis : None or int or tuple of ints, optional
Axis or axes along which a sum is performed.
The default (`axis` = `None`) is perform a sum over all
the dimensions of the input array. `axis` may be negative, in
which case it counts from the last to the first axis.
.. versionadded:: 1.7.0
它說,如果不限定軸線,將總和所有尺寸。例如:
In [4]: np.sum(np.array([[1,2],[3,4]])) # 1 + 2 + 3 + 4...
Out[4]: 10
爲什麼np.sum需要更長的時間?好直覺說,在表達式[i*matrix for i in arr]
中,你正在爲每個i
創建一個新的數組,然後np.sum將總和所有數組。
可能還有其他原因,但我猜是這樣。
來源
2015-05-04 14:07:37
Ale
這個操作應該簡單寫成'np.sum(arr)* matrix'。 – Daniel
@Ophion陣列和矩陣的形狀不一樣。我想將整個矩陣乘以數組中的每個值。然後,我想總結所有得到的矩陣。 – JesseTrevve
這可以用'np.einsum(「k,ij-> ij」,arr,matrix)''作爲''''作爲'可以看出張量之間沒有共同的指標。您可以通過計算上述任何方法和您選擇的正確答案來自行驗證。 – Daniel