the*_*man 44 python numpy matrix
所以我有一个n x d矩阵和一个n x 1向量.我正在尝试编写一个代码来通过向量减去矩阵中的每一行.
我目前有一个for迭代循环,并i通过向量减去矩阵中的第-行.有没有办法简单地通过向量减去整个矩阵?
谢谢!
当前代码:
for i in xrange( len( X1 ) ):
X[i,:] = X1[i,:] - X2
Run Code Online (Sandbox Code Playgroud)
这是X1矩阵的i第 - 行并且X2是向量.我可以做到这样我不需要for循环吗?
Joh*_*024 58
这适用于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]])
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为两者的后轴具有相同的尺寸(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]])
Run Code Online (Sandbox Code Playgroud)
这里详细解释了广播轴的规则.
Nag*_*i45 11
除了@ 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]])
Run Code Online (Sandbox Code Playgroud)
从这里开始,使用广播v从每一列中减去m是微不足道的:
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]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67661 次 |
| 最近记录: |