gpt4 book ai didi

python - 多个矩阵的加权和

转载 作者:行者123 更新时间:2023-12-03 08:04:39 24 4
gpt4 key购买 nike

我有一个包含 m 个 n x n 矩阵的列表和一个包含 m 个实数值(alpha)的列表。 n 和 m 的值可能非常大。我正在尝试计算权重为 alpha 的矩阵的加权和。

我想知道是否有一个 numpy 函数(或任何其他库)可以比手动 for 循环方法更快地完成此操作。

我已在下面包含了我当前的功能。

def calculate_matrix_sums(mats, alphas):
"""
Calculate the weighted sum of matrices in mats with weights alpha
"""
k_mults = [np.multiply(mats[i], alphas[i]) for i in range(len(alphas))]
k_sums1 = np.matrix(k_mults[0]) + np.matrix(k_mults[1])
for i in range(2, len(k_mults)):
k_sums1 = k_sums1 + np.asmatrix(k_mults[i])
k_sums2 = np.asarray(k_sums1).astype(float)
k_sums2 = k_sums2.reshape(len(mats[0]), len(mats[0]))
return k_sums2

和示例代码:

matrices = np.asarray([np.array([[1., 0.77841638, 0.53239253, 0.9444068, 0.93024477],
[0.77841638, 1., 0.7221497, 0.5805838, 0.68501944],
[0.53239253, 0.7221497, 1., 0.36986265, 0.62792847],
[0.9444068, 0.5805838, 0.36986265, 1., 0.88303226],
[0.93024477, 0.68501944, 0.62792847, 0.88303226, 1.]]),
np.array([[1., 0.45650032, 0.13898701, 0.83605729, 0.79743304],
[0.45650032, 1., 0.36094014, 0.18229867, 0.30596445],
[0.13898701, 0.36094014, 1., 0.04443844, 0.23300302],
[0.83605729, 0.18229867, 0.04443844, 1., 0.67745532],
[0.79743304, 0.30596445, 0.23300302, 0.67745532, 1.]])])
alpha_vals = [0.47547796, 0.52452204]

print(calculate_matrix_sums(matrices, alpha_vals))

如有任何建议,我们将不胜感激。

最佳答案

您可以 reshape alpha_vals 的形状,使其在矩阵的第一个轴上正确广播:

(np.array(alpha_vals)[:, None, None] * matrices).sum(axis=0)

或者,您可以调整矩阵的步长,使最后一个维度对应于alpha_vals:

(np.moveaxis(matrices, 0, -1) * alpha_vals).sum(axis=-1)

您还可以使用 np.einsum 来处理此类事情(可能是最优雅的解决方案):

np.einsum('ijk,i->jk', matrices, alpha_vals)

关于python - 多个矩阵的加权和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72808702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com