在C#中添加矩阵?

在C#中添加矩阵?,c#,arrays,matrix,C#,Arrays,Matrix,我试图用一些简单的for循环将两个矩阵加在一起。我将结果存储在数据网格视图中。但是,最后一个单元格似乎没有添加。我已经看了这段代码有一段时间了,但似乎无法理解它。我做错什么了吗 // Adds two matrices together using arrays. private void menuItemAdd_Click(object sender, EventArgs e) { // Create two 2-D arrays int

我试图用一些简单的for循环将两个矩阵加在一起。我将结果存储在数据网格视图中。但是,最后一个单元格似乎没有添加。我已经看了这段代码有一段时间了,但似乎无法理解它。我做错什么了吗

    // 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];
            }
        }
    }
//使用数组将两个矩阵相加。
私有无效菜单添加单击(对象发送者,事件参数e)
{
//创建两个二维阵列
int[,]matrixOne=新的int[dgvMatrixOne.RowCount,dgvMatrixOne.ColumnCount];
int[,]matrixTwo=新的int[dgvMatrixTwo.RowCount,dgvMatrixTwo.ColumnCount];
//总矩阵的行与第一个矩阵的行匹配。
dgvMatrixTotal.RowCount=dgvMatrixOne.RowCount;
//total矩阵的列与第一个矩阵的列匹配。
dgvMatrixTotal.ColumnCount=dgvMatrixOne.ColumnCount;
//用数据网格矩阵1中的数据填充矩阵1。
对于(int i=0;i
您确定您的矩阵大小完全相同吗?这两行很奇怪,因为您从一个矩阵获取行数,但从另一个矩阵获取列数

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

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


但是你总是以相反的顺序使用它(行在列之前)。

在像C#这样的语言中,你根本不需要担心这些东西。有一些经过尝试和测试的类库可以为您做类似的事情,重要的是,它们经过优化,可以利用处理器的SIMD指令等。如果语言有运算符重载,您只需要将矩阵声明为对象,然后将它们加在一起,得到一个简单的结果=mat_a+mat_b。

很抱歉,我要修正的是,当矩阵相乘时,这就是确定矩阵大小的方法,记住,当.AllowUserToAddress==True时,.RowCount将关闭1。我已经将其设置为false,因为它会自动添加行并造成相当大的困境。很抱歉,我没有在问题中指定这一点,但我正在尝试重新设计轮子,以了解有关轮子的更多信息。我知道那里有免费的图书馆,但我认为这将是一个很好的爱好项目。
public DataGridViewCell this [
    int columnIndex,
    int rowIndex
] { get; set; }