我的目标是尽可能快地将RGB像素列表转换为十六进制。数据格式为Numpy的多维数组(RGB色彩空间),理想情况下应该将其从RGB转换为Hex并保持其形状。
我的尝试使用列表推导式来解决这个问题,但除了性能之外,它已经成功了。在性能方面,添加ravel和列表推导式真的会使速度变慢。不幸的是,我不知道足够的数学知识来加速此过程:
编辑:更新代码以反映最新更改。当前在35,000像素图像上运行约24ms。
def np_array_to_hex(array):
array = np.asarray(array, dtype='uint32')
array = (1 << 24) + ((array[:, :, 0]<<16) + (array[:, :, 1]<<8) + array[:, :, 2])
return [hex(x)[-6:] for x in array.ravel()]
>>> np_array_to_hex(img)
['afb3bc', 'abaeb5', 'b3b4b9', ..., '8b9dab', '92a4b2', '9caebc']
hex
函数。它返回以0x
开头的字符串。int(..., 16)
可以将其转换回整数。至今没有相应的numpy
功能(据我所知)。您可以将此函数应用于数组的每个元素。 - hpauljnp.frompyfunc(hex,1,1)(arr)
. Another isnp.frompyfunc('0x{:07X}'.format,1,1)(arr)
- hpaulj