我正在閱讀這篇文章,并嘗試遵循他們的代碼示例,但我認為我缺少一個庫。
他們有這個:
首先,讓我們用一些隨機資料創建一個二維矩陣。我們將使用 System.Random 類來生成偽亂數:
var rand = new Random();
var matrix = new double[5, 5];
for (int i = 0; i < matrix.GetLength(0); i )
{
for (int j = 0; j < matrix.GetLength(1); j )
{
matrix = rand.NextDouble() * 100;
}
}
現在我們有了資料,我們可以計算平均值和標準差:
double mean = matrix.Average();
double stdDev = Math.Sqrt(matrix.Variance());
但是當我在 C# 中嘗試這樣做時,我得到了這個編譯時錯誤:
嚴重性代碼 描述 專案檔案行抑制狀態錯誤 CS1061 'double[ , ]' 不包含 'Variance' 的定義,并且找不到接受型別為 'double[ , ]' 的第一個引數的可訪問擴展方法 'Variance'(是您缺少 using 指令或程式集參考?)
我嘗試添加
using System.Numerics;
但這沒有幫助
uj5u.com熱心網友回復:
如果您想將Linq方法應用于 2D 陣列T[,]項,可以使用OfType()(或Cast<T>()) 來獲取 enumeration IEnumeration<T>。例如,在您的情況下,Average()您可以將其視為
using System.Linq;
...
var matrix = new double[5,5];
...
double mean = matrix
.OfType<double>()
.Average();
由于標準 Linq沒有(至少在 .Net 6 中)Variance方法,我們應該做一個簡單的統計。有一系列專案x = {x_1, x_2, x_3, ..., x_N}的N方差將是
Var(x) = Sum(x * x) / N - Sum(x) * Sum(x) / N / N
在我們的例子中,它可以是一個簡單的Aggregate:
// Let's compute all required statistics
// n - number of items
// s - sum of items
// s - sum of items squared
// in one go with a help of Aggregate
var stat = matrix
.OfType<double>()
.Aggregate((n: 0, s: 0.0, ss: 0.0), (s, a) => (s.n 1, s.s a, s.ss a * a));
double stdDev = Math.Sqrt(stat.ss / stat.n - stat.s * stat.s / stat.n / stat.n);
為了不處理此類結構,您可以實作擴展方法:
public static partial class Array2dExtensions {
public static double Average(this double[,] matrix) {
if (matrix == null)
throw new ArgumentNullException(nameof(matrix));
return matrix
.OfType<double>()
.Average();
}
public static double Variance(this double[,] matrix) {
if (matrix == null)
throw new ArgumentNullException(nameof(matrix));
var stat = matrix
.OfType<double>()
.Aggregate((n: 0, s: 0.0, ss: 0.0), (s, a) =>
(s.n 1, s.s a, s.ss a * a));
return stat.ss / stat.n - stat.s * stat.s / stat.n / stat.n;
}
}
實作了這個,你可以把它當作陣列有Average和Variance方法:
double mean = matrix.Average();
double stdDev = Math.Sqrt(matrix.Variance());
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/498189.html
上一篇:最長回文查找演算法的時間復雜度
