我有一个矩阵,我的任务是从矩阵中填充一维数组。
示例:
1 2 3
1 2 3
1 2 3
我需要对列进行求和并填充一维数组中每列的总和
这是我的代码(不起作用),(int[,] mat)
是函数得到的矩阵。
public static int sumcolumn(int[,] mat)
{
int sum = 0;
int[] sumcol = new int[mat.GetLength(0)];
for (int y = 0; y < mat.GetLength(0); y++)
{
for (int i = 0; i < mat.GetLength(0); i++)
{
for (int j = 0; j < mat.GetLength(1); j++)
{
sum = sum + mat[j, i];
}
sumcol[i] = sum;
return sum;
sum = 0;
}
return sum;
}
return sumcol;
}
我该怎么做这个任务?
提前致谢。
答案 0 :(得分:4)
你只需要2个for循环。对于每个列遍历所有行并总结内容。将总和写在适当的col索引处。然后在每列重置总和之后。您还需要返回带有总和的数组。所以我改变了返回值:
如果使用有意义的名称调用索引变量,也会有所帮助。
<TouchableOpacity onPress = {this.addStar}>
在主要内容你可以这样测试:
public static int[] sumcolumn(int[,] mat)
{
int[] sumcol = new int[mat.GetLength(1)];
for (int col = 0; col < mat.GetLength(1); col++)
{
for (int row = 0; row < mat.GetLength(0); row++)
{
// since sumcol is initially filled with zeros you can just
// sum up the values from mat onto the zeros in each cell
sumcol[col] += mat[row, col];
}
}
return sumcol;
}
答案 1 :(得分:2)
因此,您需要评估2D矩阵以获得1D数组的列式和。因此,您首先要做的是将方法的返回类型更改为int[]
而不是int
。
让我引用在引入修复之前您必须注意的几件事情:
i
和j
为两个正的不等整数,然后a[i,j]
和a[j,i]
将指向矩阵a
中的两个不同元素。作为一个整体,您必须修改方法签名,如下所示:
public static int[] sumcolumn(int[,] mat)
{
int sum = 0;
int[] sumcol = new int[mat.GetLength(1)];
for (int i= 0; i< mat.GetLength(1); i++)
{
sum = 0; // reset sum for next colomn
for (int j= 0; j< mat.GetLength(0); j++)
{
sum += mat[i, j];
}
// iteration of column completed
sumcol[i] = sum;
}
return sumcol;
}
答案 2 :(得分:1)
Linq方法
int[,] array = new int[3, 3] { { 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 } };
int[] result = Enumerable.Range(0, array.GetUpperBound(1) + 1)
.Select(y => Enumerable.Range(0, array.GetUpperBound(0) + 1)
.Select(x => array[x, y]).Sum()).ToArray(); // [3,6,9]
答案 3 :(得分:-1)
public static int[] sumColumn(int[,] mat)
{
//int sum = 0;
int colCount = mat.GetLength(0);
int[] sumCol = new int[colCount];
for (int y = 0; y < colCount; y++)
{
int rowCount = mat.GetLength(1);
sumCol[y] = 0;
for (int x = 0; x < rowCount; x++)
{
sumCol[y] += mat[y, x];
}
//sum += sumCol[y];
}
//return sum;
return sumCol;
}