14
我嘗試瞭解如何處理具有numpy的1D數組(向量在線性代數中)。在以下示例中,我產生兩個numpy.array a和b:numpy:具有各種形狀的1D數組
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.array([[1],[2],[3]]).reshape(1,3)
>>> a.shape
(3,)
>>> b.shape
(1, 3)
對我來說,a和b具有根據線性代數定義相同的形狀:1列,3列,但不能用於numpy的。
現在,numpy的點積:
>>> np.dot(a,a)
14
>>> np.dot(b,a)
array([14])
>>> np.dot(b,b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: objects are not aligned
我有三個不同的輸出。點(a,a)和點(b,a)有什麼區別?爲什麼點(b,b)不起作用?
我也有一些differencies與點的產品:
>>> c = np.ones(9).reshape(3,3)
>>> np.dot(a,c)
array([ 6., 6., 6.])
>>> np.dot(b,c)
array([[ 6., 6., 6.]])
感謝您的回答。那麼,如果我想用numpy做一些線性代數,最好的做法是什麼?轉換所有我的矢量在2D numpy.array?我有點困惑於兩種不同的形狀...... – Marcel 2013-03-28 12:32:40
我自己並沒有做太多的線性代數,但我認爲這取決於你想要做什麼。只是矢量產品和其他簡單的操作/計算,然後1D是好的。如果你想做矩陣計算等,你應該使用2D。 – joris 2013-03-28 13:26:56
最好的策略是使用矢量和二維數組的一維數組來表示矩陣。陣列魔術主要需要像形狀爲「(1,3)」的二維數組的構造,但不是標準線性代數的東西。就線性代數而言,這將對應於1×3矩陣不太有用的對象。 – flonk 2013-03-28 13:54:32