假设我们有一个如下数组:
a = np.array([
[k11, k12, k13, k14, k15, k16, k17, k18],
[k21, k22, k23, k24, k25, k26, k27, k28],
[k31, k32, k33, k34, k35, k36, k37, k38],
[k41, k42, k43, k44, k45, k46, k47, k48]
])
const = C
我需要从这个数组创建一个向量,像这样(runge kutta 4):
result = np.array([
const * (k11 + 2*k21 + 2*k31 + k41),
const * (k12 + 2*k22 + 2*k32 + k42),
const * (k13 + 2*k23 + 2*k33 + k43),
....
const * (k18 + 2*k28 + 2*k38 + k48)
])
我可以循环执行此操作,但我很确定 numpy 方法允许以矢量形式执行此操作。
const * np.asarray([1, 2, 2, 1])
。@
。请注意,提供一个最小的、可重复的示例将有助于比较我的和你的解决方案的等效性。
只需几个步骤即可轻松完成:
np.einsum
解决方案:ij,i
是维度a
和系数。结果j
为缺失i
,这意味着该维度在数组中相乘并求和。这个解决方案很棒,因为它对维度非常明确,无需任何重塑或转置。对于较大的矩阵或较长的乘法链,运算顺序将针对速度进行优化。