gpt4 book ai didi

c# - 从具有 NaN 的多维数组中找出最小值

转载 作者:行者123 更新时间:2023-11-30 13:38:41 24 4
gpt4 key购买 nike

我有一个二维数组 ( double[ , ] ),我想找出最小值。我尝试了 Linq.Select.Min,但由于我的数组通常包含 NaN 值,因此 minvalue 始终是 NaN

所以,我需要一些方法来找到“跳过”NaN 的最小值。

非常感谢任何帮助!

最佳答案

今天是扩展方法的一天!使用它可以在所有 double[,] 上使用通用的 Min() 函数!

这是一些通用的 [,] 扩展。请注意,这仅适用于实现 IComparable

的类型

这个什么都不忽略:

public static T Min<T>(this T[,] arr) where T : IComparable
{
bool minSet = false;
T min = default(T);
for (int i = 0; i < arr.GetLength(0); i++)
for (int j = 0; j < arr.GetLength(1); j++)
if (!minSet)
{
minSet = true;
min = arr[i, j];
}
else if (arr[i, j].CompareTo(min) < 0)
min = arr[i, j];
return min;
}

这个可以让你指定一个要忽略的值,在数组只包含被忽略值的特殊情况下,它会返回被忽略的值。

public static T Min<T>(this T[,] arr, T ignore) where T : IComparable
{
bool minSet = false;
T min = default(T);
for (int i = 0; i < arr.GetLength(0); i++)
for (int j = 0; j < arr.GetLength(1); j++)
if (arr[i, j].CompareTo(ignore) != 0)
if (!minSet)
{
minSet = true;
min = arr[i, j];
}
else if (arr[i, j].CompareTo(min) < 0)
min = arr[i, j];
return (minSet) ? min : ignore;
}

下面代码的输出是


-10

double[,] d = new double[5, 5]
{
{ 0, 1, 2, 3, 4 },
{ 5, 6, 7, 8, 9 },
{ 10, 11, -10, 12, 13 },
{ 14, 15, 16, 17, 18 },
{ 19, double.NaN, 21, 22, 23 }
};
Console.WriteLine(d.Min());
Console.WriteLine(d.Min(double.NaN));

关于c# - 从具有 NaN 的多维数组中找出最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com