我试图numpy.array根据给定的密钥翻译a的每个元素:
例如:
a = np.array([[1,2,3],
[3,2,4]])
my_dict = {1:23, 2:34, 3:36, 4:45}
Run Code Online (Sandbox Code Playgroud)
我想得到:
array([[ 23., 34., 36.],
[ 36., 34., 45.]])
Run Code Online (Sandbox Code Playgroud)
我可以看到如何使用循环:
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
Run Code Online (Sandbox Code Playgroud)
是否有更高效和/或纯粹的numpy方式?
编辑:
我计时了,np.vectorizeDSM提出的方法对于更大的数组要快得多:
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 …Run Code Online (Sandbox Code Playgroud) 我想用 Python 将 3 通道 RGB 图像转换为索引图像。它用于处理训练深度网络以进行语义分割的标签。我所说的索引图像是指它有一个通道,每个像素都是索引,索引应该从零开始。当然,它们应该具有相同的尺寸。转换基于 Python 字典中的以下映射:
\n\ncolor2index = {\n (255, 255, 255) : 0,\n (0, 0, 255) : 1,\n (0, 255, 255) : 2,\n (0, 255, 0) : 3,\n (255, 255, 0) : 4,\n (255, 0, 0) : 5\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我已经实现了一个简单的功能:
\n\ndef im2index(im):\n """\n turn a 3 channel RGB image to 1 channel index image\n """\n assert len(im.shape) == 3\n height, width, ch = im.shape\n assert ch == 3\n m_lable = np.zeros((height, width, 1), …Run Code Online (Sandbox Code Playgroud)