減去矩陣中的每一行所以我有一個n x d
矩陣和n x 1
載體。我正在嘗試編寫一個代碼,用矢量減去矩陣中的每一行。NumPy的通過矢量
我現在有一個for
循環迭代訪問通過和由向量中減去在基質中i
-th行。 有沒有簡單的方法來減去矢量的整個矩陣?
謝謝!
當前代碼:
for i in xrange(len(X1)):
X[i,:] = X1[i,:] - X2
這是X1
是矩陣的i
行和第X2
是矢量。我可以做到這一點,我不需要for
循環?
減去矩陣中的每一行所以我有一個n x d
矩陣和n x 1
載體。我正在嘗試編寫一個代碼,用矢量減去矩陣中的每一行。NumPy的通過矢量
我現在有一個for
循環迭代訪問通過和由向量中減去在基質中i
-th行。 有沒有簡單的方法來減去矢量的整個矩陣?
謝謝!
當前代碼:
for i in xrange(len(X1)):
X[i,:] = X1[i,:] - X2
這是X1
是矩陣的i
行和第X2
是矢量。我可以做到這一點,我不需要for
循環?
只適用於numpy
,但只有尾軸具有相同的尺寸。下面是成功地從矩陣減去一個向量的示例:
In [27]: print m; m.shape
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
Out[27]: (4, 3)
In [28]: print v; v.shape
[0 1 2]
Out[28]: (3,)
In [29]: m - v
Out[29]:
array([[0, 0, 0],
[3, 3, 3],
[6, 6, 6],
[9, 9, 9]])
這個工作,因爲兩者的尾軸具有相同的尺寸(3)。
在你的情況下,引導軸具有相同的尺寸。下面是一個例子,使用相同的v
如上,如何可固定:
In [35]: print m; m.shape
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
Out[35]: (3, 4)
In [36]: (m.transpose() - v).transpose()
Out[36]:
array([[0, 1, 2, 3],
[3, 4, 5, 6],
[6, 7, 8, 9]])
用於廣播軸的規則在深度here進行說明。
除了@ John1024回答,「換位」,在numpy的一維向量可以做這樣的:
In [1]: v = np.arange(3)
In [2]: v
Out[2]: array([0, 1, 2])
In [3]: v = v[:, np.newaxis]
In [4]: v
Out[4]:
array([[0],
[1],
[2]])
從這裏,從m
每列減去v
是微不足道的使用廣播:
In [5]: print(m)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
In [6]: m - v
Out[6]:
array([[0, 1, 2, 3],
[3, 4, 5, 6],
[6, 7, 8, 9]])
如何在第二種情況下'mv.transpose()'? –