当前位置: 首页 > 知识库问答 >
问题:

如何获取2d数组中每个列和行的总和?

韦衡
2023-03-14

我有一个7x12的2d数组。我一直在研究如何获得它的每一列和每一行的总和,并将每个结果放入列表中,一个是每列总和的结果,另一个是每个行的结果。

因此,对于列,我想将每列的结果保存在一个临时整数变量中,在每一行中使用“a”进行迭代,当“a”等于12(即行数)时,然后检查“p”(即列数)是否等于7并退出循环(这意味着每列的总和已添加到新数组中),如果不是这样,则临时变量将被添加到新数组中,临时变量和“a”将重置,因此循环可以再次开始并将p递增1以获取下一行的总和。

for (int a = 0; a < 12; a++)
        {
            int sum =+ students[a, p];

            if(a == 12)
            {
                if (p == 7)
                {
                    break;
                }

                sum_columns.Add(sum);
                sum = 0;
                a = 0;
                p++;

            }
        }

谢谢你们!

共有3个答案

王旺
2023-03-14

使用Linq,

 public int GetSumOfColumn(int[,] matrix, int columnNumber)
    {
        return Enumerable.Range(0, matrix.GetLength(0))
                .Select(x => matrix[x, columnNumber])
                .Sum();
    }

    public int GetSumOfRow(int[,] matrix, int rowNumber)
    {
        return Enumerable.Range(0, matrix.GetLength(1))
                .Select(x => matrix[rowNumber, x])
                .Sum();
    }

在单独的for循环中调用这些函数,我对行进行了调用,您可以对列进行相同的尝试。

    List<int> row_sum = new List<int>();
    for(var rowIndex = 0; rowIndex < 4; rowIndex++)
    {
        var sum = GetSumOfRow(array, rowIndex);
        row_sum.Add(sum);
    }
    Console.WriteLine(string.Join(Environment.NewLine, row_sum));

实现:. NET FIDDLE

参考编号: https://www.codegrepper.com/

空俊语
2023-03-14

不是最有效的,但允许您抓取特定的行或列。

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

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

    static void Main(string[] args)
    {
        int[,] someArray = new int[4, 2]
            {
                { 1, 2 },
                { 3, 4 },
                { 5, 6 },
                { 7, 8 }
            };
        int rows = someArray.GetUpperBound(0) + 1;
        int columns = someArray.GetUpperBound(1) + 1;
        for (int i = 0; i < rows; i++)
            Console.WriteLine($"Row {i} sum is {GetRow(someArray, i).Sum()}");
        for (int i = 0; i < columns; i++)
            Console.WriteLine($"Column {i} sum is {GetColumn(someArray, i).Sum()}");
    }
}

输出:

Row 0 sum is 3
Row 1 sum is 7
Row 2 sum is 11
Row 3 sum is 15
Column 0 sum is 16
Column 1 sum is 20
东方玉泽
2023-03-14

您可以根据需要简单地迭代。无需复杂条件或重置:

for (int col = 0; col < 7; ++col) // iterate through the columns
{
    int sum = 0;
    for (int row = 0; row < 12; ++row) // iterate through the rows in the column and sum
    {
        sum += students[row, col];
    }
    sum_columns.Add(sum); // add sum to the list
}

在线试用

 类似资料:
  • 问题内容: 对于Java中的数组,我们可以使用获取数组的。同样,如何获得 2D 数组的行数和列数? 问题答案: 好吧,您可能想要获取行数和列数。也就是说,如果您这样定义数组:

  • 问题内容: 我知道2D数组是数组的数组。要获得一行,您可以执行以下操作: 由于每行的大小可以不同,因此我假设它不是内置的,无法从2D数组中获取列。它使我相信您必须执行以下操作: 这样对吗?这是唯一的方法吗? 问题答案: 如果您被限制使用二维数组,那么可以,这就是afaik。但是,可能会帮助您的建议(如果可能): 将数组包装在处理列提取的类中。 祝好运。

  • 我的数据帧像这样: 我得到了概率栏 结果是: 但是我想获取每行的第一列数据,如下所示: 如何做到这一点? 输入为标准随机林输入,输入上方为<code>val数据=预测。选择(“文档ID”,“概率”) root|--docID: string(nullable=true)|--标签:双(nullable=false)|--特征:向量(nullable=true)|--indexedLabel:双(n

  • 问题内容: 假设 如何获得由每n行之和组成的新系列? 当n = 5时,预期结果如下所示; 如果使用loc或iloc并通过python循环,当然可以完成,但是我相信可以简单地以Pandas方式完成。 另外,这是一个非常简化的示例,我不希望对序列进行解释:)。我正在尝试的实际数据系列具有时间索引和每秒发生的事件数作为值。 问题答案: 将索引分为5组,并相应地分组。 + 如果大小是N的倍数(或5),则可

  • 问题内容: 这应该很容易,但是以某种方式我找不到有效的解决方案。 我有一个熊猫数据框,看起来像这样: 我想按col1和col2分组并获得col3和col4。 由于无法汇总数据,因此可以删除。 这是输出的样子。我很感兴趣,同时具有和中产生的数据帧。是否和是否属于索引并不重要。 这是我尝试过的: 但是,这只会返回的汇总结果。 我在这里迷路了。我发现的每个示例仅汇总一列,显然不会发生此问题。 问题答案:

  • 问题内容: 假设我的表包含以下内容: 每次通过while循环。我想获取价格值的总和,但ID中的每个不同值仅获取一次 因此,以上述示例为例,我将得到类似以下内容的信息: 补充一下,我可能偶然发现了类似的帖子。问题是其他职位使用Oracle,另一方面我正在使用MySQL。 问题答案: 你需要和