如何将0到1和1映射到-1?

时间:2013-11-05 17:06:35

标签: c# python math hlsl

我试图将值0转换为1,将1转换为-1,但不使用if语句。我试着做一些数学运算来将它映射到一个新的范围,但我无法为这两个参数做到这一点。

这可行吗?

但是,如果没有集合中的硬编码值,则必须执行此操作,例如:

initial = 0 or 1;
final_value = (initial + 1) * -1;

因此,最终值将根据初始值映射到1或-1,使用相同的等式。

编辑:我基本上试图摆脱if语句,因为这是着色器代码,我的朋友在工作(着色程序员)说if语句会减慢执行速度所以最好这样做事情一致。不确定它是否有意义。

2 个答案:

答案 0 :(得分:9)

在Python中:

arr = [1, -1]
mapped = arr[n]

答案 1 :(得分:7)

1-(2*variable_value)

会给你这些价值......但是很有可能这不是你想要的......因为它很难说出你想要的东西

因为你已经澄清了你想要着色器的速度,我想我会添加这个信息

In [3]: %timeit x= 1 if not random.randint(0,1) else -1 #if statement
1000000 loops, best of 3: 1.31 us per loop

In [4]: %timeit x= 1-(2*random.randint(0,1)) #simple math
1000000 loops, best of 3: 1.32 us per loop

In [5]: %timeit x= [1,-1][random.randint(0,1)] #array lookup
1000000 loops, best of 3: 1.41 us per loop

In [7]: %timeit x= arr[random.randint(0,1)]
1000000 loops, best of 3: 1.31 us per loop

我实际上有点惊讶的是数组查找速度较慢(实际上只有你没有构建数组)