【发布时间】:2014-09-22 15:23:15
【问题描述】:
我需要将两个大矩阵相乘并对它们的列进行排序。
import numpy
a= numpy.random.rand(1000000, 100)
b= numpy.random.rand(300000,100)
c= numpy.dot(b,a.T)
sorted = [argsort(j)[:10] for j in c.T]
此过程需要大量时间和内存。有没有办法加快这个过程?如果不是,我如何计算执行此操作所需的 RAM?我目前有一个带有 4GB RAM 且没有交换的 EC2 盒子。
我想知道这个操作是否可以序列化,我不必将所有内容都存储在内存中。
【问题讨论】:
-
那么您真正感兴趣的只是 10 个最小的标量积吗?然后你可以在块中迭代并在途中扔掉很多东西。
-
这似乎是个好主意.. 我该怎么做?我的意思是有pythonic方式还是我必须编写自己的算法?
-
如果你只需要最小的 10 个,你应该看看
np.argpartition,我想它会节省你一些时间。其他建议:stackoverflow.com/q/6910641/2379410
标签: python performance numpy matrix-multiplication