使用 Numpy 向量化标量函数调用

Vectorize scalar function calls using Numpy

我想使用 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, :])

您可以使用 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)