Я бы хотел создать N
матриц размерности (n,k)
одновременно.
У меня есть код в Matlab, и я пытаюсь преобразовать его в C. Позволяет сказать, что я хочу построить 2 матрицы одновременно, в R-языке следующее:
http://www.dummies.com/how-to/content/how-to-create-an-array-in-r.html ("См. раздел " Использование функций-создателей в R ")
Пожалуйста, помогите мне, я знаю, что для некоторых из вас этот вопрос глупо, но я новичок в этом языке, и мне больше никто не спрашивать.
Давайте сначала объясним что-то о многомерных массивах. 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;
}
}
}
a[n][k]
- это n
массивов из k
элементов, то a[n][k][N]
- это n
массивов размерного array[k][N]
. Вы представляете один случай, когда вашим первым измерением является количество массивов, а затем второй случай, когда вашим последним измерением является количество массивов, которое является непоследовательным. На самом деле, либо это просто один массив (в конце концов, адреса памяти являются последовательными), и компилятор просто запоминает измерения, чтобы он мог вычислить правильные смещения, когда вы ссылаетесь на элементы массива ...
std::vector
илиstd::array
не C-array.