C# 检查二维数组中的任何元素是否为 NaN 或无穷大的最佳方法

PBr*_*nek 3 c# multidimensional-array

有谁知道检查 2D 数组中的元素是否为 NaN 或无穷大的最佳方法是什么?我的数组可能很大,所以我不想循环它。我正在考虑使用

double[,] myArray;
if ( !double.IsNaN(myArray.Cast<double>().Min() ) && !double.IsInfinity( myArray.Cast<double>().Min() )
{
    // have finite values as elements
}
Run Code Online (Sandbox Code Playgroud)

用于 NaN 和无穷大检查。我只需要知道数组中是否有 NaN 或无穷大的元素,因此我认为只需检查数组中的最小元素就可以解决 NaN 和无穷大的问题。有一个更好的方法吗?感谢您提供的任何帮助或建议。

Ree*_*sey 5

我个人会使用:

if (!myArray.Cast<double>().Any(d => double.IsNaN(d) || double.IsInfinity(d)))
{
     // All have correct values...
Run Code Online (Sandbox Code Playgroud)

除了更短之外,这还应该接近手动编写循环的速度,因为它使其保持单次传递值,并且如果达到“坏”值则立即退出(因为Any()将停止对失败进行评估)。


由于我的数组可能会变大,我想我会编写循环以获得更好的性能/

如果您正在处理非常大的数组,一种选择是并行执行此检查:

if (!myArray.Cast<double>().AsParallel()
            .Any(d => double.IsNaN(d) || double.IsInfinity(d)))
{
     // All have correct values...
Run Code Online (Sandbox Code Playgroud)

对于非常大的数组,这通常会优于直接循环,因为多个内核可以通过 PLINQ 处理分区数据。