Python 带矢量运算的外积和展平-numpy

Python 带矢量运算的外积和展平-numpy,python,numpy,Python,Numpy,我使用二维数组m和一维数组v执行以下操作: result = np.array([np.outer(v, m_row).flatten() for m_row in m]) 然而,这比numpy纯向量运算慢得多,因为我在最后使用了列表理解和np.array 我可以用一个操作为矩阵中的每一行执行此outer乘积吗?或者至少只使用向量运算,而不使用循环或列表理解?扩展dims,然后使用- 或者,与- 对于形状的m(30,5)和形状的v(6,5): (m[:, None, :]*v[:, None

我使用二维数组
m
和一维数组
v
执行以下操作:

result = np.array([np.outer(v, m_row).flatten() for m_row in m])
然而,这比numpy纯向量运算慢得多,因为我在最后使用了列表理解和
np.array

我可以用一个操作为矩阵中的每一行执行此
outer
乘积吗?或者至少只使用向量运算,而不使用循环或列表理解?

扩展dims,然后使用-

或者,与-


对于形状的
m
(30,5)和形状的
v
(6,5):

(m[:, None, :]*v[:, None]).reshape(m.shape[0], -1)
np.einsum('ij,k->ikj', m, v).reshape(m.shape[0], -1)
%timeit (m[:, None, :]*v[:, None]).reshape(m.shape[0], -1)
# 5.93 µs ± 77.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit np.einsum('ij,k->ikj', m, v).reshape(m.shape[0], -1)
# 5.44 µs ± 61.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit np.array([np.outer(v, m_row).flatten() for m_row in m])
# 179 µs ± 18.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)