2015-04-22 67 views
0

我试图找到一种超快速的方式来获取向量中每个值的符号。我希望能够在加速框架中找到这样的功能,但无法找到它。下面是它会做:加速框架“签名”功能

float *inputVector = .... // some audio vector 
int length = ...// length of input vector. 
float *outputVector = ....// result 

for(int i = 0; i<length; i++) 
{ 
    if(inputVector[i] >= 0) outputVector[i] = 1; 
    else outputVector[i] = -1; 
} 
+0

标准的C/C++数学函数是'signbit {f}'。您可能需要对负值进行修正,但在大多数情况下,这应该是足够的。 – njuffa

回答

1

好吧,我想我已经找到了一种方法......

vvcopysignf()“复制一个数组,设定基于第二阵列上的每个值的符号。 “

所以,一种方法是制作一个1的数组,然后使用此函数根据输入数组更改1的符号。

float *ones = ... // a vector filled with 1's 
float *input = .... // an input vector 
float *output = ... // an output vector 
int bufferSize = ... // size of the vectors; 

vvcopysignf(output, ones, input, &bufferSize); 

//output now is an array of -1s and 1s based the sign of the input. 
+1

使用dispatch_benchmark运行一些测试 - 这个方法比在问题中描述的循环中快80%。甚至比用signbit()做得更快 – olynoise