Как мы можем создать N матриц одновременно в C ++?

0

Я бы хотел создать N матриц размерности (n,k) одновременно.

У меня есть код в Matlab, и я пытаюсь преобразовать его в C. Позволяет сказать, что я хочу построить 2 матрицы одновременно, в R-языке следующее:

http://www.dummies.com/how-to/content/how-to-create-an-array-in-r.html ("См. раздел " Использование функций-создателей в R ")

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

  • 0
    Определить одновременно . Или вам просто нужно 3 таких матрицы?
  • 0
    Предпочитают использовать std::vector или std::array не C-array.
Показать ещё 2 комментария
Теги:

1 ответ

0
Лучший ответ

Давайте сначала объясним что-то о многомерных массивах. a[n][k] - это n массивов, каждый из которых содержит k элементов. Таким образом, a[n][k][N] создаст n массивов типа a[k][N]. Все, что вам нужно сделать, это определить массив (например: int a[2][3][4]).

Если вы не знаете размеры массивов во время компиляции, используйте динамическое распределение и указатели. Код выглядит примерно так:

int*** pppA = new int**[n];
for (int i = 0; i < n; i++)
{
    pppA[i] = new int*[k];
    for (int j = 0; j < k; j++)
    {
        pppA[i][j] = new int[N];
    }
}

не забудьте удалить память, которую вы закончили с ее помощью.

Я не знаю R, но если бы я понял пример, связанный с комментарием, то что-то вроде этого (если вы знаете размеры во время компиляции):

int a[3][4][2];

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

инициализатор:

int a[2][4][3] = {{{1,2,3},{4,5,6},{7,8,9},{10,11,12}},{{13,14,15},{16,17,18},{19,20,21},{22,23,24}}};
//print the array
for (int i =0; i < 2; i ++)
{
    for (int j = 0; j < 4; j++)
    {
        for (int k = 0; k < 3; k++)
        {
            cout << a[i][j][k] << ','; 
        }
        cout << endl;
    }
    cout << "---------------------" << endl;
}

цикл:

int a[2][4][3];
for (int i =0; i < 2; i ++)
{
    for (int j = 0; j < 4; j++)
    {
        for (int k = 0; k < 3; k++)
        {
            a[i][j][k] = 12 * i + 4*j + k; 
        }
    }
}
  • 0
    Я думаю, вам нужно снова взглянуть на эти первые пару предложений. Если a[n][k] - это n массивов из k элементов, то a[n][k][N] - это n массивов размерного array[k][N] . Вы представляете один случай, когда вашим первым измерением является количество массивов, а затем второй случай, когда вашим последним измерением является количество массивов, которое является непоследовательным. На самом деле, либо это просто один массив (в конце концов, адреса памяти являются последовательными), и компилятор просто запоминает измерения, чтобы он мог вычислить правильные смещения, когда вы ссылаетесь на элементы массива ...
  • 0
    Спасибо за помощь. Я не очень хорошо знаю этот язык и не могу понять ваш пост. Не могли бы вы сказать мне, как я могу сделать этот пример dummies.com/how-to/content/how-to-create-an-array-in-r.html (см., Пожалуйста, параграф «Использование функций создателя в R») с С?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню