如何在C/C++中實現與numpy的numpy.nan_to_num
函數相當的行爲?C/C++中numpy.nan_to_num的等效形式
故障排除基本非Python程序員:
更換楠零和INF有限的數字。
返回一個數組或標量,用非常小的(或負數)數字替換非零的數字(NaN), (正數)無窮大,負數無窮大 。 ... NaN由 替換爲零,無窮大(-infinity)由適合輸出dtype的最大(最小或最大爲負數)浮點值替換。
如何在C/C++中實現與numpy的numpy.nan_to_num
函數相當的行爲?C/C++中numpy.nan_to_num的等效形式
故障排除基本非Python程序員:
更換楠零和INF有限的數字。
返回一個數組或標量,用非常小的(或負數)數字替換非零的數字(NaN), (正數)無窮大,負數無窮大 。 ... NaN由 替換爲零,無窮大(-infinity)由適合輸出dtype的最大(最小或最大爲負數)浮點值替換。
我最終使用這個,因爲我想保持連續性。它也適用於opencl,並且不需要任何C99的東西。
float nan_to_num(float num){
if (isinf(num)){
if (signbit(num))
return MAXFLOAT;
else
return -MAXFLOAT;
} else {
return num;
}
}
只是好奇,「C99的東西」有什麼問題? –
我使用opencl C,它只是C99的一個子集。 –
這是有道理的,但應該肯定已被添加到問題! –
試試這個:
#include <math.h>
double normalize(double num)
if (isnormal(num)){
return num;
} else {
return 0;
}
}
如果無窮要經過特殊處理的,你也可以使用isinf(num)
作爲條件,返回您所選擇的「大」號。
C自'C99開始有'fpclassify()'。它將允許您檢查異常浮點值(NaN,無窮和子異常),這是實現提供所描述行爲的函數所需的。 –