-4

我正在尝试将值 0 转换为 1 并将 1 转换为 -1,但不使用 if 语句。我试图做一些数学运算以将其映射到一个新范围,但我无法为这两个参数做这件事。

这是可行的吗?

但是,它必须在集合中没有硬编码值的情况下执行此操作,例如:

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

所以最终值将根据初始值映射到 1 或 -1,使用相同的方程。

编辑:我基本上是想摆脱该if语句,因为这是着色器代码,而我在工作的朋友(着色器程序员)说if语句会减慢执行速度,因此最好统一执行。不确定这是否有意义。

4

2 回答 2

9

在 Python 中:

arr = [1, -1]
mapped = arr[n]
于 2013-11-05T17:07:37.183 回答
6
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

实际上,我对数组查找速度较慢感到有些惊讶(实际上,仅当您还没有构造数组时)

于 2013-11-05T17:07:50.100 回答