Как я могу инициализировать мой объект Matrix, как я это сделал бы с многомерным массивом в C #? - PullRequest
1 голос
/ 03 апреля 2019

Мне пришлось создать класс Matrix, чтобы я мог использовать его в своем проекте нейронной сети.Как я могу добиться этого при создании объекта Matrix, он будет работать так же, как и с многомерным массивом?

Так что в основном у меня есть класс Matrix, который выглядит следующим образом:

class Matrix
{
    private int rows;
    private int size;
    private int columns;
    private double[,] _inMatrix;
    public double this[int row, int col]
    {
        get
        {
            return _inMatrix[row, col];
        }
        set
        {
            _inMatrix[row, col] = value;
        }

    }
    public Matrix(int row, int col)
    {
        rows = row;
        columns = col;
        size = row * col;
        _inMatrix = new double[rows, columns];
    }
    public Matrix()
    {

    }
    //and bunch of operations

Это работаеткак очарование, когда я знаю строки и столбцы Матрицы, но я хотел бы иметь возможность устанавливать значения в начале или позже.Когда я создаю объект Matrix, я делаю это следующим образом:

Matrix m1=new Matrix(row, column)

Что я хочу сделать, так это иметь возможность устанавливать значения в начале, как это было бы для массивов.Я знаю, что в C # мы инициализируем многомерный массив так:

double[,] 2Darray = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
//or
int[,] 2Darray;
2Darray = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

Как мне добиться чего-то похожего?

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Может быть, что-то вроде этого, чтобы иметь implicit operator, чтобы иметь возможность Matrix m = new double[,] { {1,1}, {2,3}};.Также вам не нужны _rows и _columns, поскольку вы можете легко извлечь их из лежащего в основе многомерного массива (GetLength(int dimention)).

class Matrix
{
    private double[,] _inMatrix;

    public double this[int row, int col]
    {
        get => _inMatrix[row, col];
        set => _inMatrix[row, col] = value;
    }

    public Matrix(double[,] a) => Initialize(a);

    //and bunch of operations

    private void Initialize(double[,] a) => _inMatrix = a;

    public static implicit operator Matrix(double[,] a) => new Matrix(a);
}
1 голос
/ 03 апреля 2019

Для предварительной установки значений вы можете просто сделать то, что вы уже сами себе предлагаете.

Просто заполните пустой конструктор значениями, которые вы хотите там.

public Matrix()
{
    _inMatrix = new double[ , ] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
}

После этого вы можете просто создать новую матрицу со значениями, которые вы хотели там видеть.

Matrix m1=new Matrix()

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

public Matrix(double[,] _NewMatrix)
{
    _inMatrix = _NewMatrix;
}

и позвоните по номеру

double[,] NewMatrix = new double[ , ] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
Matrix m_Matrix = new Matrix( NewMatrix );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...