考虑以下 Numpy 数组广播练习。
import numpy as np
v = np.array([[1.0, 2.0]]).T # column array
A2 = np.random.randn(2,10) # 2D array
A3 = np.random.randn(2,10,10) # 3D
v * A2 # works great
# causes error:
v * A3 # error
我知道 Numpy 的广播规则,并且熟悉bsxfun
Matlab 中的功能。我理解为什么尝试将 (2,1) 数组广播到 (2,N,N) 数组会失败,并且在此之前我必须将 (2,1) 数组重塑为 (2,1,1) 数组广播通过。
我的问题是:有没有办法告诉Python在尝试广播时自动填充数组的维数,而无需我专门告诉它必要的维数?
I 不想明确耦合(2,1) 向量和它将被广播的多维数组——否则我可以做一些愚蠢和丑陋的事情,比如mult_v_A = lambda v,A: v.reshape([v.size] + [1]*(A.ndim-1)) * A
。我提前不知道“A”数组是 2D、3D 还是 N 维。
MATLAB的bsxfun
广播功能会根据需要隐式填充维度,所以我希望我可以在 Python 中做一些事情。