gpt4 book ai didi

python - 根据键翻译numpy数组中的每个元素

转载 作者:IT老高 更新时间:2023-10-28 20:32:57 25 4
gpt4 key购买 nike

我正在尝试根据给定的键翻译 numpy.array 的每个元素:

例如:

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 方式?

编辑:

我计时了,DSM 提出的 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)

最佳答案

我不知道效率如何,但您可以在字典的 .get 方法上使用 np.vectorize:

>>> a = np.array([[1,2,3],
[3,2,4]])
>>> my_dict = {1:23, 2:34, 3:36, 4:45}
>>> np.vectorize(my_dict.get)(a)
array([[23, 34, 36],
[36, 34, 45]])

关于python - 根据键翻译numpy数组中的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16992713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com