मैं किसी खास कुंजी के अनुसार एक numpy.array
के प्रत्येक तत्व का अनुवाद करने में कोशिश कर रहा हूँ के अनुसार:numpy सरणी में प्रत्येक तत्व अनुवाद कुंजी
उदाहरण के लिए:
:a = np.array([[1,2,3],
[3,2,4]])
my_dict = {1:23, 2:34, 3:36, 4:45}
मैं प्राप्त करना चाहते हैं
array([[ 23., 34., 36.],
[ 36., 34., 45.]])
मैं कैसे एक पाश के साथ यह करने के लिए देख सकते हैं:
def loop_translate(a, my_dict):
new_a = np.empty(a.shape)
for i,row in enumerate(a):
new_a[i,:] = map(my_dict.get, row)
return new_a
क्या कोई और अधिक कुशल और/या शुद्ध numpy तरीका है?
संपादित करें:
मैं इसे समय समाप्त हो गया है, और np.vectorize
विधि डीएसएम द्वारा प्रस्तावित काफी तेज बड़े विन्यास के लिए है:
In [13]: def loop_translate(a, my_dict):
....: new_a = np.empty(a.shape)
....: for i,row in enumerate(a):
....: new_a[i,:] = map(my_dict.get, row)
....: return new_a
....:
In [14]: def vec_translate(a, my_dict):
....: return np.vectorize(my_dict.__getitem__)(a)
....:
In [15]: a = np.random.randint(1,5, (4,5))
In [16]: a
Out[16]:
array([[2, 4, 3, 1, 1],
[2, 4, 3, 2, 4],
[4, 2, 1, 3, 1],
[2, 4, 3, 4, 1]])
In [17]: %timeit loop_translate(a, my_dict)
10000 loops, best of 3: 77.9 us per loop
In [18]: %timeit vec_translate(a, my_dict)
10000 loops, best of 3: 70.5 us per loop
In [19]: a = np.random.randint(1, 5, (500,500))
In [20]: %timeit loop_translate(a, my_dict)
1 loops, best of 3: 298 ms per loop
In [21]: %timeit vec_translate(a, my_dict)
10 loops, best of 3: 37.6 ms per loop
In [22]: %timeit loop_translate(a, my_dict)
संबंधित प्रश्न: http://stackoverflow.com/questions/3403973/fast-replacement-of-values-in-a-numpy-array –