2016-07-05 77 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)作为条件,返回您所选择的“大”号。