我有一个(n, m)
矩阵M
,由n
向量组成,长度为m
。
我想计算一个维度为(n, n)
的矩阵K
,其中在位置(i, j)
处,原始向量i
和向量j
之间的元素最小向量之和。
因此,例如,如果矩阵M
的向量i
等于[ 2, 5, 4 ]
,向量j
等于[ 3, 1, 6 ]
,则按元素的最小向量为[ 2, 1, 4 ]
,并且该向量的和为7
。在矩阵K
中,在位置(i, j)
处必须有7
。
当然,使用for循环并不难做到这一点,但我想只使用NumPy的向量化运算来计算K
,因为矩阵M
很大,使用循环等标准运算非常慢。
有人能帮帮我吗
我已经尝试过使用np.minimum.outer(M)
,它输出一个(n, m, n, m)
矩阵Z
,其中(i, j, k, l)
中的值是原始矩阵中M(i, j)
和M(k, l)
之间的最小值,因此为M
的每个值计算一个矩阵,该矩阵与M
中的所有元素相比具有该值之间的最小值。
问题是,我仍然没有弄清楚如何使用NumPy运算正确地对Z的元素求和。
1条答案
按热度按时间o8x7eapl1#
要获取所有行对,可以使用
itertools.product
和repeat=2
。然后,可以使用它来索引数组以获取行对,执行元素最小值,将其求和,并将其整形为所需的平方。字符串
测试结果:
型
中间体:
型