我想使用colorsys模块在RGB和HSL之间进行转换。 但是,colorsys API是基于标量的。 我想知道如何在没有for循环的情况下对其进行矢量化,以便我可以执行类似
的操作hsl = np.vstack([np.ones((1, 256)), np.ones((1, 256,)), np.ones((1, 256,))]).transpose()
rgb = colorsys.hls_to_rgb(hsl[0, :], hsl[1, :], hsl[2, :])
答案 0 :(得分:1)
你可以使用np.vectorize
,但正如lolopop指出的那样,这只会增加语法糖;它不会使隐式循环更快:
import colorsys
import numpy as np
rgb_to_hls = np.vectorize(colorsys.rgb_to_hls)
hls_to_rgb = np.vectorize(colorsys.hls_to_rgb)
arr = np.random.random((2, 2, 3)) * 255
r, g, b = arr[:, :, 0], arr[:, :, 1], arr[:, :, 2]
h, l, s = rgb_to_hls(r, g, b)
r2, g2, b2 = hls_to_rgb(h, l, s)
arr2 = np.dstack([r2, g2, b2])
assert np.allclose(arr, arr2)