我只是想知道我是否想要使用本文中的算法(p5-6)实现将波长转换为(r,g,b)的程序:http://www.scientificbulletin.upb.ro/rev_docs_arhiva/full49129.pdf,而不是检查波长的值使用if-else喜欢
if wavelength>380 and wavelength<410:
# do something
elif wavelength<440:
# do something
elif wavelength<490:
# do something, and so on
是否有一些天才方法可以避免使用if-else语句以便我可以加速代码?更具体地说,假设我将波长存储在列表或numpy数组中,是否可以进行某种“矢量化”。生成(r,g,b)值的方法?
答案 0 :(得分:0)
是的,有。如果您的波长是numpy数组,则可以使用boolean masks代替if ... elif ...
子句。
关于矢量化操作的第二个问题......我想你想要这样的事情:
wavelengths = np.array([1,2,3])
conversion = np.array([-0.41,0,0.6]).reshape(3,1) # R, G, B Parts
wavelengths * conversion
# Reshape is needed to get a 3x3 result
array([[-0.41, -0.82, -1.23],
[ 0. , 0. , 0. ],
[ 0.6 , 1.2 , 1.8 ]])
给定的公式比这个例子复杂一点,但StackOverflow并不是要写代码。我想通过这个例子你应该能够实现这些公式。