python - 矩阵数组乘以向量

标签 python vector numpy matrix-multiplication

我有一个矩阵数组,我想乘以一个向量(因此矩阵中的第一个数组应该乘以向量中的第一个值,等等)。

import numpy as np

# Three matrices/double arrays                                              
a = np.array([[1,2], [3, 4]])
b = np.array([[2,3], [4, 5]])
c = np.array([[3,4], [5, 6]])

# An array of matrices                                                      
d = np.array([a, b, c])

# A vector                                                                  
e = np.array([1,2,3])

# Multiply every matrix by the corresponding value in the vector            
f = [ d[i] * e[i] for i in range(len(e)) ]

# Somewhat to my surpise however, this doesn't work                         
g = d * e # <-- Doesn't work

# Nor does                                                                  
h = e * d # <-- Doesn't work

所以列表理解有效,但我不知何故怀疑这是否是最有效的做事方式。

我是否忽略了一些非常简单的事情?

最佳答案

您需要对齐轴:

f = d * e[:,np.newaxis,np.newaxis]

d.shape
(3, 2, 2)
e.shape
(3,)
e[:,np.newaxis,np.newaxis].shape
(3, 1, 1)

另一种方法是使 d 的形状为 (2,2,3),然后 e(形状为 (3,))将可以广播到 d 的形状。

您真正想要的是了解更多关于 broadcasting 的信息.

编辑:

关于你的第二个问题,就地乘法:

d *= e[:,np.newaxis,np.newaxis]

没有创建副本。

关于python - 矩阵数组乘以向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16566655/

相关文章:

python - 检查 numpy 数组中步幅的非歧义性

object - 在 Rust(0.5 和/或 trunk)中,如何创建可变对象的可变向量?

结构的c++ vector 和从文件中读取

c++ - 为什么我得到 "No viable conversion from ' vector<Country >' to ' int'"?

numpy - numba:就地排序数组

python - 将字典放入数据框 - python

Python 相当于 npm 或 ruby​​gems?

python - 删除几乎相同的行 numpy 数组

python - 计算具有复数的非常大的矩阵的欧几里德距离的最快方法是什么?

python - 如何在 numpy 中有效地组合排列?