如何在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,无穷和子异常),这是实现提供所描述行为的函数所需的。 –