Python - 循环加速 - 大数据集

Python - Speed-up for loops - large data sets

我是 Python 的新手,我需要加速这个简单的代码。

我在 Matlab 中创建了这段代码,它“立即”运行。 我尝试在 Python 中 'convert' 它,但它非常慢...

在我最后的代码中,这块操作要循环上千次... 所以最后,代码的这个特定部分需要尽可能高效...

# a and B define the size of the data
a=9000  
b=4000
c=np.ones((a,))   # not one in my code
d=np.random.rand(a,b)  # not random in my code

res=np.zeros((b,1))  # pre-alloc

# here is the loop to be speed up !
tic = time.time()
for x in range(b):
    res[x]=sum(c*d[:,x])
toc = time.time()
print(toc-tic)    

只是为了让它更难......理论上,“a”可以大到'millions'......而“b”可以大到几十万...... 不好玩...

有什么建议吗?

非常感谢您的帮助!

比纳比克

一般来说,在处理 numpy 数组时应避免循环,因为 numpy 向量化操作的效率要高得多。此代码给出相同的结果:

a=9000  
b=4000
c=np.ones((a,))
d=np.random.rand(a,b)
res=np.zeros((b,1))

# replaces the loop
(c*d.T).sum(axis=1).reshape(-1, 1)