You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LINQ计算float数组列表的对应元素平均值

使用LINQ计算List<float[]>对应位置元素的平均值

假设你所有的向量(float数组)长度一致,下面是用LINQ实现的核心代码:

List<float[]> vectors = new List<float[]>
{
    new float[] {1.0f, 2.0f, 3.0f},
    new float[] {4.0f, 5.0f, 6.0f},
    new float[] {7.0f, 8.0f, 9.0f}
};

// 处理空列表的情况
if (!vectors.Any())
{
    return Array.Empty<float>();
}

int vectorLength = vectors[0].Length;
float[] averages = Enumerable.Range(0, vectorLength)
    // 对每个索引,计算所有向量该位置的平均值
    .Select(index => vectors.Average(vector => vector[index]))
    // 将double类型的平均值转换为float
    .Select(avg => (float)avg)
    .ToArray();

关键步骤说明

  • 先用Any()检查列表是否为空,避免后续访问vectors[0]时抛出空引用异常
  • Enumerable.Range(0, vectorLength)生成每个元素的索引,覆盖向量的所有位置
  • vectors.Average(vector => vector[index])计算所有向量在当前索引位置的平均值(注意Average方法返回double类型,需要显式转换为float)
  • 最后用ToArray()将LINQ查询结果转换为目标float数组

处理向量长度不一致的情况

如果你的列表中存在长度不同的向量,有两种常见处理方式:

  1. 取最短向量的长度计算:只计算所有向量都有的位置的平均值
if (!vectors.Any())
{
    return Array.Empty<float>();
}

int minLength = vectors.Min(v => v.Length);
float[] averages = Enumerable.Range(0, minLength)
    .Select(index => vectors.Average(vector => vector[index]))
    .Select(avg => (float)avg)
    .ToArray();
  1. 强制要求所有向量长度一致:如果存在长度不同的向量,直接抛出异常
if (!vectors.Any())
{
    return Array.Empty<float>();
}

int vectorLength = vectors[0].Length;
if (vectors.Any(v => v.Length != vectorLength))
{
    throw new ArgumentException("所有向量的长度必须相同");
}

float[] averages = Enumerable.Range(0, vectorLength)
    .Select(index => vectors.Average(vector => vector[index]))
    .Select(avg => (float)avg)
    .ToArray();

内容的提问来源于stack exchange,提问作者TonySoprano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:39:15