2015-04-22 52 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