考虑以下 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 在尝试广播时自动填充数组的维度,而无需我专门告诉它必要的维度?
我不想将 (2,1) 向量与要广播的多维数组显式耦合——否则我可能会做一些愚蠢和荒谬丑陋的事情,比如mult_v_A = lambda v,A: v.reshape([v.size] + [1]*(A.ndim-1)) * A
. 我不知道“A”阵列是 2D 还是 3D 还是 ND。
Matlab 的bsxfun
广播功能会根据需要隐式填充尺寸,所以我希望我可以在 Python 中做一些事情。