python array太慢_python – 为什么Pypy添加numpy数组会变慢?

为了测试Pypy JIT明显更快的说法,我写了一个简单的代码,重复添加两个大小为1200×1200的数组.我的代码如下

import numpy as np

import random

a=np.zeros((1200, 1200), dtype=np.float32)

b=np.zeros((1200, 1200), dtype=np.float32)

import timeit

#Start timer

start=timeit.default_timer()

#Initialize the arrays

for j in range(1200):

for k in range(1200):

a[j][k]=random.random()

b[j][k]=random.random()

#Repeatedly add the arrays

for j in range(10):

a=np.add(a,b)

#Stop timer and display the results

stop=timeit.default_timer()

print stop-start

使用普通的python,执行时间大约是1.2到1.5秒.然而对于Pypy它超过15秒?

同样在上面的例子中,我只添加了10次数组.如果我将此值增加到1000,我的计算机将停止响应.我发现这是因为在使用pypy时几乎消耗了整个RAM.难道我做错了什么?或者是其他问题?

最佳答案 在所有情况下,pypy都不会在numpy数组中进行垃圾收集,这可能是你内存不足,溢出到磁盘然后锁定的原因.

有两种解决方案.最简单的方法是通过执行以下操作简单地告诉pypy删除数组:

import gc

del my_array

gc.collect()

这将迫使pypy进行垃圾收集.请注意,除非确实需要,否则不应将gc.collect()置于紧密循环中.

这样你仍然可以从numpy操作结构,但你可以手动删除/调整数组大小.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值