Добавление матриц в C #? - PullRequest
       12

Добавление матриц в C #?

2 голосов
/ 23 февраля 2009

Я пытаюсь добавить две матрицы вместе в C #, используя несколько простых циклов 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];
            }
        }
    }

Ответы [ 2 ]

2 голосов
/ 23 февраля 2009

Вы уверены, что ваша матрица имеет точно такой же размер, эти две строки все равно странны, потому что вы берете количество строк из одной матрицы, а количество столбцов из другой.

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

Я полагаю, что ваша ошибка заключается в том, что MSDN заявляет, что свойство Item (используемое для доступа к массиву с помощью оператора []):

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

Но вы всегда используете его в обратном порядке (строка перед столбцом).

1 голос
/ 23 февраля 2009

На таком языке, как C #, вам не нужно беспокоиться об этом. Существуют проверенные и протестированные библиотеки классов, которые делают такие вещи для вас, и, что важно, они оптимизированы с учетом инструкций SIMD вашего процессора и т. Д. Если в языке есть перегрузка операторов, вам просто нужно объявить свои матрицы как объекты, и сложите их вместе с простым результатом = mat_a + mat_b.

...