Python 使用格式运算符%将RGB值的numpy数组转换为十六进制

Python 使用格式运算符%将RGB值的numpy数组转换为十六进制,python,numpy,colors,format,Python,Numpy,Colors,Format,接下来,使用formatting操作符将其应用于numpy数组的最佳方法是什么,其中数组的格式与下面给出的RGB值对应 注:RGB值已缩放为0到1,因此乘以255以重新缩放 您需要为每一行指定一个值,您可以使用matplotlib中的rgb2hex from matplotlib.colors import rgb2hex [ rgb2hex(A[i,:]) for i in range(A.shape[0]) ] # ['#687847', '#979b8d', '#706d59', '#6

接下来,使用formatting操作符将其应用于numpy数组的最佳方法是什么,其中数组的格式与下面给出的RGB值对应

注:RGB值已缩放为0到1,因此乘以255以重新缩放


您需要为每一行指定一个值,您可以使用matplotlib中的
rgb2hex

from matplotlib.colors import rgb2hex

[ rgb2hex(A[i,:]) for i in range(A.shape[0]) ]
# ['#687847', '#979b8d', '#706d59', '#6a734d', '#8b5e66', '#5e5051']
如果您不希望使用matplotlib函数,则在使用引用的SO答案之前,需要将数组转换为
int
。请注意,输出中存在细微差异,我认为这是由于舍入误差造成的

B = np.array(A*255, dtype=int) # convert to int

# Define a function for the mapping
rgb2hex = lambda r,g,b: '#%02x%02x%02x' %(r,g,b)

[ rgb2hex(*B[i,:]) for i in range(B.shape[0]) ]
# ['#687846', '#979a8d', '#706d59', '#6a734d', '#8a5e66', '#5e5050']

&
不是格式化运算符。你是说
%
?另外,您能否给出一个示例,说明您希望输出是什么样的?我不明白你在问什么。更正并更新了我的问题hi@Niklas你能解释一下你使用的代码中发生了什么吗
[rgb2hex(*B[I,:])对于范围内的I(B.shape[0])]
当然。外部的
[]
括号表示一个。这将在
范围内循环
,并为每个过程创建一个元素(检查
[i for i in range(4)]
)。在每个过程中,一行
B
,即
B[:,i]
用作函数
rgb2hex
的输入。由于此函数需要三个输入,
*
扩展行,否则该行将是一个单独的参数(参见例如SO问题)。
B = np.array(A*255, dtype=int) # convert to int

# Define a function for the mapping
rgb2hex = lambda r,g,b: '#%02x%02x%02x' %(r,g,b)

[ rgb2hex(*B[i,:]) for i in range(B.shape[0]) ]
# ['#687846', '#979a8d', '#706d59', '#6a734d', '#8a5e66', '#5e5050']