【问题标题】:Summation within iteration over two variables with matrix operations使用矩阵运算对两个变量进行迭代求和
【发布时间】:2021-06-21 11:16:46
【问题描述】:

我有以下矩阵:Q、P、q 和 y,形状分别为 (100,100)、(100,100)、(100,100) 和 (100,2)。

对于每个 i,我想计算以下内容:

这是我迄今为止尝试过的方法,它似乎有效,但我知道这是不好的做法 并且非常缓慢。

grad = np.zeros(100, 2)
for i in range(100):
    tmp = 0
    for j in range(100):
         tmp += ((P[i, j] - Q[i, j]) * q[i, j] * (y[i, :] - y[j, :]))
    grad[i, :] = tmp * 4

我的问题是如何使用矩阵运算而不是嵌套循环来计算它?

【问题讨论】:

  • 图中的方程不是双求和,而是j上的单求和。然后结果将 i 作为变量。那么你想要一个双倍和的答案,还是图像中的方程的答案?
  • @tom10 你是对的,我没有正确提出我的问题。对于每个我想计算总和,所以它不应该是双重总和,而是迭代内的总和。更新了问题。

标签: python numpy matrix optimization


【解决方案1】:

根据您的符号,尝试广播:

grad = 4 * (((P-Q)*q)[...,None]*(y[:,None,:]-y[None])).sum(axis=1)

【讨论】:

    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 2018-07-21
    • 2014-08-09
    • 2022-08-15
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    相关资源
    最近更新 更多