If statement 规避if-else检查的方法

If statement 规避if-else检查的方法,if-statement,numpy,optimization,conditional,vectorization,If Statement,Numpy,Optimization,Conditional,Vectorization,我只是想知道我是否想用本文(p5-6)中的算法实现一个将波长转换为(r,g,b)的程序,而不是用if-else之类的方法来检查波长的值 if wavelength>380 and wavelength<410: # do something elif wavelength<440: # do something elif wavelength<490: # do something, and so on 如果波长>380且波长是,则有。若你们的波

我只是想知道我是否想用本文(p5-6)中的算法实现一个将波长转换为(r,g,b)的程序,而不是用if-else之类的方法来检查波长的值

if wavelength>380 and wavelength<410:
    # do something
elif wavelength<440:
    # do something
elif wavelength<490:
    # do something, and so on

如果波长>380且波长是,则有。若你们的波长在一个numpy数组中,你们可以用它来代替
,若。。。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并不是为了编写代码。我认为通过这个例子,你应该能够实现这些公式

什么是波长?标量、列表、数组等?
做些什么
做些什么来
波长
?波长是一个数字。最简单的方法是将它们作为标量。将它们存储在其他结构中是否有助于避免使用这些if-else语句。这些“做某事”指的是链接中显示的计算,即找到给定波长的三个数字(r、g、b)。