2016-07-05 78 views
-2

如何在C/C++中實現與numpy的numpy.nan_to_num函數相當的行爲?C/C++中numpy.nan_to_num的等效形式

故障排除基本非Python程序員:

更換楠零和INF有限的數字。

返回一個數組或標量,用非常小的(或負數)數字替換非零的數字(NaN), (正數)無窮大,負數無窮大 。 ... NaN由 替換爲零,無窮大(-infinity)由適合輸出dtype的最大(最小或最大爲負數)浮點值替換。

+1

C自'C99開始有'fpclassify()'。它將允許您檢查異常浮點值(NaN,無窮和子異常),這是實現提供所描述行爲的函數所需的。 –

回答

1

我最終使用這個,因爲我想保持連續性。它也適用於opencl,並且不需要任何C99的東西。

float nan_to_num(float num){ 
    if (isinf(num)){ 
    if (signbit(num)) 
     return MAXFLOAT; 
    else 
     return -MAXFLOAT; 
    } else { 
    return num; 
    } 
} 
+0

只是好奇,「C99的東西」有什麼問題? –

+0

我使用opencl C,它只是C99的一個子集。 –

+0

這是有道理的,但應該肯定已被添加到問題! –

1

試試這個:

#include <math.h> 

double normalize(double num) 
    if (isnormal(num)){ 
     return num; 
    } else { 
     return 0; 
    } 
} 

如果無窮要經過特殊處理的,你也可以使用isinf(num)作爲條件,返回您所選擇的「大」號。