Как постепенно увеличить размерность матрицы в Matlab / Octave? - PullRequest
0 голосов
/ 22 февраля 2020

Как можно постепенно увеличить размерность матрицы, добавив новое значение в матрицу, как показано ниже?

octave:1> A = 1;
octave:2> A(1,2) = 1; 
octave:3> A(1,1,2) = 1;
octave:4> A(1,1,1,2) = 1;
octave:5> A(1,1,1,1,2) = 1;
octave:6> A(1,1,1,1,1,2) = 1;
 ...
and so on, N times

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

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

c=zeros(1,2^m);
if m > 1, c=reshape(c,2*ones(1,m)); endif;
c(1)=1;
for i=0:m-1, c(2^i+1)=1; endfor

Например, если m = 4, мы получим желаемое результат

octave:6> [c(1,1,1,1), c(2,1,1,1), c(1,2,1,1), c(1,1,2,1), c(1,1,1,2)]
ans =

   1   1   1   1   1
0 голосов
/ 22 февраля 2020

Чтобы создать массив с произвольным числом измерений в октаве, просто используйте vec. Например:

n = 7; # number of dimensions
x = [1 1]; # you must have at least two elements
vec (x, n)

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

В качестве альтернативы вы также можете укажите размер при создании массива с помощью ones или аналогичной функции и вычислите размер программно:

n = 7;
x = ones ([repmat(1, 1, n-1) 2])
...