查找从 xml 文件中提取的数字的平均值

发布于 2024-12-05 17:11:15 字数 954 浏览 3 评论 0原文

我有从 XML 文件中提取数据的代码。我想找到每个提取值的平均值(XMaxXMinYMaxYMin, ZMax, ZMin)

以下是我提取六个值的方法:

var query = from file in fileEntries
            let doc = XDocument.Load(file) 
            let x = doc.Descendants("XAxisCalib").Single() 
            let y = doc.Descendants("YAxisCalib").Single() 
            let z = doc.Descendants("ZAxisCalib").Single() 
            select new
            {
                XMax = x.Element("Max").Value, 
                XMin = x.Element("Min").Value, 
                YMax = y.Element("Max").Value, 
                YMin = y.Element("Min").Value, 
                ZMax = z.Element("Max").Value, 
                ZMin = z.Element("Min").Value 
            };

我是否在正确的轨道上获得 XMax 的平均值:

 var Average1 =
    from a in query
    select new 
    { AvgMaxX =  a.Average(a => a.XMax) };

I have code that extracts data out of an XML file. I want to find the average / mean value for each of the extracted values (XMax, XMin, YMax, YMin, ZMax, ZMin)

Here is how I extracted the six values:

var query = from file in fileEntries
            let doc = XDocument.Load(file) 
            let x = doc.Descendants("XAxisCalib").Single() 
            let y = doc.Descendants("YAxisCalib").Single() 
            let z = doc.Descendants("ZAxisCalib").Single() 
            select new
            {
                XMax = x.Element("Max").Value, 
                XMin = x.Element("Min").Value, 
                YMax = y.Element("Max").Value, 
                YMin = y.Element("Min").Value, 
                ZMax = z.Element("Max").Value, 
                ZMin = z.Element("Min").Value 
            };

Am I on the right track with this average for XMax:

 var Average1 =
    from a in query
    select new 
    { AvgMaxX =  a.Average(a => a.XMax) };

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

骄傲 2024-12-12 17:11:15
var averageMaximumX = query.Average(t => t.XMax);
var averageMinimumX = query.Average(t => t.XMin);
var averageMaximumY = query.Average(t => t.YMax);
var averageMinimumY = query.Average(t => t.YMin);
var averageMaximumZ = query.Average(t => t.ZMax);
var averageMinimumZ = query.Average(t => t.ZMin);

编辑:将字符串转换为双精度或小数或其他:

var averageMaximumX = query.Average(t => double.Parse(t.XMax));
//OR: var averageMaximumX = query.Average(t => decimal.Parse(t.XMax));

但我实际上会在选择中执行此操作:

select new
{
    XMax = double.Parse(x.Element("Max").Value),
    XMin = double.Parse(x.Element("Min").Value),
// etc.
var averageMaximumX = query.Average(t => t.XMax);
var averageMinimumX = query.Average(t => t.XMin);
var averageMaximumY = query.Average(t => t.YMax);
var averageMinimumY = query.Average(t => t.YMin);
var averageMaximumZ = query.Average(t => t.ZMax);
var averageMinimumZ = query.Average(t => t.ZMin);

EDIT: To convert the strings to doubles or decimals or whatever:

var averageMaximumX = query.Average(t => double.Parse(t.XMax));
//OR: var averageMaximumX = query.Average(t => decimal.Parse(t.XMax));

But I would actually do it in the select:

select new
{
    XMax = double.Parse(x.Element("Max").Value),
    XMin = double.Parse(x.Element("Min").Value),
// etc.
请远离我 2024-12-12 17:11:15

这是一种破解你的答案的方法,但我根本不喜欢这个,而且我确信有一个正确的方法:

double aXMax = 0;
double aXMin = 0;
double aYMax = 0;
double aYMin = 0;
double aZMax = 0;
double aZMin = 0;

int count = (from file in fileEntries
        let doc = XDocument.Load(file) 
        let x = doc.Descendants("XAxisCalib").Single() 
        let y = doc.Descendants("YAxisCalib").Single() 
        let z = doc.Descendants("ZAxisCalib").Single() 
        select new
        {
            aXMax += x.Element("Max").Value, 
            aXMin += x.Element("Min").Value, 
            aYMax += y.Element("Max").Value, 
            aYMin += y.Element("Min").Value, 
            aZMax += z.Element("Max").Value, 
            aZMin += z.Element("Min").Value 
        }).Count();

aXMax /= (double)count;
aXMin /= (double)count;
aYMax /= (double)count;
aYMin /= (double)count;
aZMax /= (double)count;
aZMin /= (double)count;

还没有测试过它,但它应该可以工作,尽管它是如此丑陋...

Here is one way to hack your way into getting your answers, but I don't like this at all and I'm sure there is a proper way :

double aXMax = 0;
double aXMin = 0;
double aYMax = 0;
double aYMin = 0;
double aZMax = 0;
double aZMin = 0;

int count = (from file in fileEntries
        let doc = XDocument.Load(file) 
        let x = doc.Descendants("XAxisCalib").Single() 
        let y = doc.Descendants("YAxisCalib").Single() 
        let z = doc.Descendants("ZAxisCalib").Single() 
        select new
        {
            aXMax += x.Element("Max").Value, 
            aXMin += x.Element("Min").Value, 
            aYMax += y.Element("Max").Value, 
            aYMin += y.Element("Min").Value, 
            aZMax += z.Element("Max").Value, 
            aZMin += z.Element("Min").Value 
        }).Count();

aXMax /= (double)count;
aXMin /= (double)count;
aYMax /= (double)count;
aYMin /= (double)count;
aZMax /= (double)count;
aZMin /= (double)count;

Haven't tested it out, but it should work, even though it's SO ugly...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文