在C#中添加矩阵?

时间:2009-02-23 00:33:39

标签: c# arrays matrix

我正在尝试使用一些简单的for循环在C#中添加两个矩阵。我将结果存储在数据网格视图中。但是,最后一个单元格似乎没有添加。我一直在看这段代码一段时间,似乎无法弄明白。我做错了吗?

    // Adds two matrices together using arrays.
    private void menuItemAdd_Click(object sender, EventArgs e)
    {
        // Create two 2-D arrays
        int[,] matrixOne = new int[dgvMatrixOne.RowCount, dgvMatrixOne.ColumnCount];
        int[,] matrixTwo = new int[dgvMatrixTwo.RowCount, dgvMatrixTwo.ColumnCount];

        // The rows of the total matrix match the rows of the first matrix.
        dgvMatrixTotal.RowCount = dgvMatrixOne.RowCount;

        // The columns of the total matrix match the columns of the first matrix.
        dgvMatrixTotal.ColumnCount = dgvMatrixOne.ColumnCount;

        // Fill matrix one with the data in the data grid matrix one.
        for (int i = 0; i < dgvMatrixOne.RowCount; i++)
        {
            for (int j = 0; j < dgvMatrixOne.ColumnCount; j++)
            {
                matrixOne[i, j] = Convert.ToInt32(dgvMatrixOne[i, j].Value);
            }
        }

        // Fill matrix two with the data in the data grid matrix two.
        for (int i = 0; i < dgvMatrixTwo.RowCount; i++)
        {
            for (int j = 0; j < dgvMatrixTwo.ColumnCount; j++)
            {
                matrixTwo[i, j] = Convert.ToInt32(dgvMatrixTwo[i, j].Value);
            }
        }

        // Set the total data grid to matrix one + matrix two.
        for (int i = 0; i < dgvMatrixOne.RowCount; i++)
        {
            for (int j = 0; j < dgvMatrixOne.ColumnCount; j++)
            {
                dgvMatrixTotal[i, j].Value = matrixOne[i, j] + matrixTwo[i, j];
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

你确定你的矩阵具有完全相同的大小,这两行是奇怪的,因为你从一个矩阵获取行数,但从另一个矩阵获取列数。

dgvMatrixTotal.RowCount = dgvMatrixOne.RowCount;
dgvMatrixTotal.ColumnCount = dgvMatrixTwo.ColumnCount;

我相信您的错误是MSDN声明Item属性(用于与[]运算符进行数组访问)是:

public DataGridViewCell this [
    int columnIndex,
    int rowIndex
] { get; set; }

但是你总是在颠倒顺序(列前一行)中使用它。

答案 1 :(得分:1)

在像C#这样的语言中,你真的不必担心这些东西。有经过试验和测试的类库可以为您完成这类工作,更重要的是,它们已经过优化,可以利用处理器的SIMD指令等。如果语言有运算符重载,您只需要声明您的矩阵作为对象,并将它们与简单的结果一起添加= mat_a + mat_b。