扩展尺寸,然后使用
broadcasting
-
(m[:, None, :]*v[:, None]).reshape(m.shape[0], -1)
或者,与
np.einsum
-
np.einsum('ij,k->ikj', m, v).reshape(m.shape[0], -1)
为了
m
形状
(30, 5)
和
v
形状
(6,)
:
%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)