求和多维数组 C# [英] Sum multidimensional array C#

查看:48
本文介绍了求和多维数组 C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从多维数组中整理出一些值,然后计算平均选定值?

因此,当我单击某个图像时,它不仅应该在鼠标指针所在的点显示深度数据(来自 Microsoft Kinect),而且还应该计算环境中的值(多维数组).

这是我的代码:

 protected void imageIR_MouseClick(object sender, System.Windows.Input.MouseEventArgs e){//获取鼠标指针的 x 和 y 坐标.System.Windows.Point mousePoint = e.GetPosition(imageIR);double xpos_IR = mousePoint.X;双 ypos_IR = mousePoint.Y;int x = (int)xpos_IR;int y = (int)ypos_IR;lbCoord.Content = "x- & y- 坐标 [像素]: " + x + " ; " + y;int d = (ushort)pixelData[x + y * this.depthFrame.Width];d = d>>3;int xpos_Content = (int)((x - 320) * 0.03501/2 * d/10);int ypos_Content = (int)((240 - y) * 0.03501/2 * d/10);xpos.Content = "x- 坐标 [mm]: " + xpos_Content;ypos.Content = "y- 坐标 [mm]: " + ypos_Content;zpos.Content = "z- 坐标 [mm]:" + (d);//分配数组大小国际我= 10;int[] x_array = new int[i];int[] y_array = new int[i];int[,] d_array = new int[i,i];for (int m = 0; m <10; m++){for (int n = 0; n <10; n++){x_array[m] = x + m;y_array[n] = y + n;d_array[m, n] = (ushort)pixelData[x_array[m] + y_array[n] * this.depthFrame.Width];d_array[m, n] = d_array[m, n] >>3;}}}

所以,首先:如何对 d_array[m,n] 中的所有值求和?是否可以计算每行的总和(-> 一维数组/向量),然后再次计算列的总和(-> 零维数组/标量)?

解决方案

所以,首先:如何对 d_array[m,n] 中的所有值求和

您可以使用:

int sum = d_array.Cast().Sum();

这将自动展平多维数组并计算所有元素的总和.

<块引用>

是否可以计算每行的总和(-> 一维数组/向量),然后再次计算列的总和(-> 零维数组/标量)?

是的,但这需要手动循环.对此没有简单的单行代码,尽管编写处理它的方法很容易,即:

IEnumerableGetRow(T[,] 数组,整数行){for (int i = 0; i <= array.GetUpperBound(1); ++i)yield return array[row, i];}IEnumerableGetColumn(T[,] 数组,整数列){for (int i = 0; i <= array.GetUpperBound(0); ++i)yield return array[i, column];}

然后你可以这样做:

var row1Sum = GetRow(d_array, 1).Sum();

How do I sort out some values from multidimensional Array and then calculate the average selected value?

So when I click some Image, it should show depth data (from Microsoft Kinect) not only in the point where the mouse pointer stands, but also it should calculate the value in the environment (which is multidimensional Array).

This is my code:

    protected void imageIR_MouseClick(object sender, System.Windows.Input.MouseEventArgs e)
    {
        // Get the x and y coordinates of the mouse pointer.
        System.Windows.Point mousePoint = e.GetPosition(imageIR);
        double xpos_IR = mousePoint.X;
        double ypos_IR = mousePoint.Y;
        int x = (int)xpos_IR;
        int y = (int)ypos_IR;
        lbCoord.Content = "x- & y- Koordinate [pixel]: " + x + " ; " + y;
        int d = (ushort)pixelData[x + y * this.depthFrame.Width];
        d = d >> 3;
        int xpos_Content = (int)((x - 320) * 0.03501 / 2 * d/10);
        int ypos_Content = (int)((240 - y) * 0.03501 / 2 * d/10);
        xpos.Content = "x- Koordinate [mm]: " + xpos_Content;
        ypos.Content = "y- Koordinate [mm]: " + ypos_Content;
        zpos.Content = "z- Koordinate [mm]: " + (d);

        // Allocating array size
        int i = 10;
        int[] x_array = new int[i];
        int[] y_array = new int[i];
        int[,] d_array = new int[i,i];

        for (int m = 0; m < 10; m++)
        {
            for (int n = 0; n < 10; n++)
            {
                x_array[m] = x + m;
                y_array[n] = y + n;
                d_array[m, n] = (ushort)pixelData[x_array[m] + y_array[n] * this.depthFrame.Width];
                d_array[m, n] = d_array[m, n] >> 3;
            }
        }
    }

So, firstly: how do I sum all the values from d_array[m,n] ? Is it possible to calculate the sum of each row (-> one dimensional Array / vector) and then calculate again the sum of the column (-> zero-dimensional Array / scalar)?

解决方案

So, firstly: how do I sum all the values from d_array[m,n]

You can use:

int sum = d_array.Cast<int>().Sum();

This will automatically flatten out the multidimensional array and take the sum of all elements.

Is it possible to calculate the sum of each row (-> one dimensional Array / vector) and then calculate again the sum of the column (-> zero-dimensional Array / scalar)?

Yes, but this would require looping manually. There is no simple one liner for this, though it would be easy to write methods to handle it, ie:

IEnumerable<T> GetRow(T[,] array, int row)
{
    for (int i = 0; i <= array.GetUpperBound(1); ++i)
         yield return array[row, i];
}

IEnumerable<T> GetColumn(T[,] array, int column)
{
    for (int i = 0; i <= array.GetUpperBound(0); ++i)
         yield return array[i, column];
}

You could then do:

var row1Sum = GetRow(d_array, 1).Sum();

这篇关于求和多维数组 C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆