【发布时间】:2019-07-11 16:00:34
【问题描述】:
我希望计算 2d numpy 数组与其自身的内积 - 即 np.inner(A,A) - 然后为每一行提取第二个最大值及其索引:
import numpy as np
import heapq
A = np.random.rand(1000,1000)
prod = np.inner(A,A)
tmp = []
for i, x in enumerate(prod):
idx = heapq.nlargest(2, range(len(x)), key=x.__getitem__)[1]
max_val = heapq.nlargest(2, x)[1]
tmp.append((i, idx, val))
但是,如果 A 变得很大,那么在一次只需要两行的情况下,将整个产品存储在内存中是不可行的。例如,这在 C 中非常容易实现,但我不确定如何在 python 中实现。
似乎应该有一种优雅的方法来用 numpy 或 scipy 解决它,但我无法弄清楚。
【问题讨论】:
-
prod的大小与A相同。 -
@hpaulj 很好。我应该用 A 而不是产品来说明这一点。 IE。没有将整个 A 保存在内存中,一次只保留两行 - 在我的情况下,A 是从另一个来源产生的
标签: python numpy matrix-multiplication