我相信还有更有效的方法,但是现在尝试
from numpy import copynewArray = copy(theArray)for k, v in d.iteritems(): newArray[theArray==k] = v
微基准测试和正确性测试:
#!/usr/bin/env python2.7from numpy import copy, random, arangerandom.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 bdef f2(a, d): for i in xrange(len(a)): a[i] = d.get(a[i], a[i]) return adef 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



