用C#将 double[] Samples = lstReportsDis.Select(f => f.TestValue).ToArray();以上得到的数据每十个一组进行分组,并且求平均值,之后再对求到的平均值求平均值
时间: 2023-12-14 08:36:10 浏览: 179
你可以使用 LINQ 的 `Chunk` 扩展方法将数组分块,然后使用 `Average` 方法求每个块的平均值。最后再对所有块的平均值再次使用 `Average` 方法求平均值。以下是示例代码:
```csharp
using System.Linq;
// 将数组分块
public static IEnumerable<IEnumerable<double>> Chunk(IEnumerable<double> source, int chunkSize)
{
while (source.Any())
{
yield return source.Take(chunkSize);
source = source.Skip(chunkSize);
}
}
// 计算每个块的平均值
double[] blockAverages = Chunk(Samples, 10).Select(block => block.Average()).ToArray();
// 计算所有块的平均值
double result = blockAverages.Average();
```
相关问题
在C#中 double[] Samples = lstReportsDis.Select(f => f.TestValue).ToArray();将该数组,每十个为一组,分成若干数组,然后对每一个数组进行如下求值lstReportsCPK.Where(f => !f.TestValue.Equals(double.NaN)).Average(f => f.TestValue);再将所有求得的所有结果进行求平均
您好,您可以使用 LINQ 的扩展方法 `Batch` 将一个数组分成若干个固定大小的子数组,然后再对每个子数组求平均值,最后再对所有平均值求平均值。具体实现代码如下:
```csharp
double[] Samples = lstReportsDis.Select(f => f.TestValue).ToArray();
// 将 Samples 数组分成若干个大小为 10 的子数组
var subArrays = Samples.Batch(10);
// 对每个子数组求平均值
var averages = subArrays.Select(subArray => lstReportsCPK
.Where(f => !f.TestValue.Equals(double.NaN) && subArray.Contains(f.TestValue))
.Average(f => f.TestValue));
// 对所有平均值求平均值
double result = averages.Average();
```
需要注意的是,在对每个子数组求平均值时,我们使用了 `lstReportsCPK.Where(f => !f.TestValue.Equals(double.NaN) && subArray.Contains(f.TestValue))` 这个 LINQ 查询,它会筛选出 `lstReportsCPK` 列表中符合以下两个条件的元素:
- `TestValue` 不等于 `double.NaN`;
- 在当前子数组中。
最后,我们对筛选出的元素求平均值,得到这个子数组的平均值。
samples = np.random.normal
()的作用是什么?如何比较np.random和纯python的方式的时间?
答:samples = np.random.normal()的作用是生成指定形状的正态分布随机数数组。比较np.random和纯python的方式的时间可以使用%timeit命令,其中%timeit samples = [normalvariate(0, 1) for _ in range(N)]用于计算纯python方式生成N个正态分布随机数的时间,%timeit np.random.normal(size=N)用于计算使用np.random生成N个正态分布随机数的时间。
阅读全文