python 替换array中的值_快速替换numpy数组中的值

我相信还有更有效的方法,但是现在尝试

from numpy import copy

newArray = copy(theArray)

for k, v in d.iteritems(): newArray[theArray==k] = v

微基准测试和正确性测试:

#!/usr/bin/env python2.7

from numpy import copy, random, arange

random.seed(0)

data = random.randint(30, size=10**5)

d = {4: 0, 9: 5, 14: 10, 19: 15, 20: 0, 21: 1, 22: 2, 23: 3, 24: 0}

dk = d.keys()

dv = d.values()

def f1(a, d):

b = copy(a)

for k, v in d.iteritems():

b[a==k] = v

return b

def f2(a, d):

for i in xrange(len(a)):

a[i] = d.get(a[i], a[i])

return a

def f3(a, dk, dv):

mp = arange(0, max(a)+1)

mp[dk] = dv

return mp[a]

a = copy(data)

res = f2(a, d)

assert (f1(data, d) == res).all()

assert (f3(data, dk, dv) == res).all()

结果:

$ python2.7 -m timeit -s 'from w import f1,f3,data,d,dk,dv' 'f1(data,d)'

100 loops, best of 3: 6.15 msec per loop

$ python2.7 -m timeit -s 'from w import f1,f3,data,d,dk,dv' 'f3(data,dk,dv)'

100 loops, best of 3: 19.6 msec per loop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值