不确定是否更快,但你可以这样做:
hexarr = np.vectorize('{:02x}'.format)
然后在RGB数组上运行它:
In [67]: a = (np.random.rand(2,5,3)*255).astype('u1')
In [68]: a
Out[68]:
array([[[149, 145, 203],
[210, 234, 219],
[223, 50, 26],
[166, 34, 65],
[213, 78, 115]],
[[191, 54, 168],
[ 85, 235, 36],
[180, 140, 96],
[127, 21, 24],
[166, 210, 128]]], dtype=uint8)
In [69]: hexarr(a)
Out[69]:
array([[['95', '91', 'cb'],
['d2', 'ea', 'db'],
['df', '32', '1a'],
['a6', '22', '41'],
['d5', '4e', '73']],
[['bf', '36', 'a8'],
['55', 'eb', '24'],
['b4', '8c', '60'],
['7f', '15', '18'],
['a6', 'd2', '80']]],
dtype='|S2')
您可以使用
view
来折叠第三个维度:
In [71]: hexarr(a).view('S6')
Out[71]:
array([[['9591cb'],
['d2eadb'],
['df321a'],
['a62241'],
['d54e73']],
[['bf36a8'],
['55eb24'],
['b48c60'],
['7f1518'],
['a6d280']]],
dtype='|S6')
不幸的是,这似乎并没有快多少(只是快了两倍左右):
In [89]: timeit rgb_to_hex(a)
1 loops, best of 3: 6.83 s per loop
In [90]: timeit hexarr(a).view('S6')
1 loops, best of 3: 2.54 s per loop