[Matlab] Как проиндексировать массивы, выдаваемые циклом?

vmir-spb

Есть цикл for. Допустим он выдаёт несколько матриц(для примера. Реально их порядка 100). Как их различить между собой для дальнейших операций?
P.S. Требуется написать прогу, которая будет считать распределение Аллана для разного числа точек, по которым идёт усреднение. Может кто знаком с этим...

CHYDO

Не совсем понял вопрос. Если у тебя в каждом цикле заполняется матрица m*n и потом после того, как цикл закончит работу, необходимо будет к этим матрицам обращаться, то можно сделать так (пусть в цикле 100 шагов):
 
my_matrices = zeros( 100, m, n );
i = 0;

for ...
<твой цикл>
i = i + 1;
my_matrices( i, :, : ) = <матрица, которую заполнил цикл>
end


Потом, когда надо обратиться к i-й матрице, используешь my_matrices( i, :, : )

vmir-spb

Вопрос ты понял правильно. my_matrices = zeros( 100, m, n ) - здесь создаются 3-х мерные нулевые матрицы?

CHYDO

Здесь создается одна 3-мерная матрица, заполненная нулями. "Слоями" этой матрицы как раз будут матрицы, заполняемые в цикле.

vmir-spb

Спасибо! Попробую сделать так.

wendy8

Только, наверное, лучше, чтобы номером матрицы было 3-е измерение. Есть подозрение, что это будет эффективнее. А, кроме того, удобнее просматривать, если в ком. строке введёшь просто "my_matrices", то он тебе их как раз по 3-му измерению и разобьёт (т.е. сначала напечатает my_matrices(:,:,1 потом - my_matrices(:,:,2) - и т.д.

ryzzyi

можно еще так:
matrices = cell(100,1)
for (i = 1:100)
matrices{i} = ...;
end;

vmir-spb

Всем спасибо! Сделал через комбинацию циклов while и for - так не нужно заморачиваться с 3-х мерными матрицами и согласовывать размерность.
Оставить комментарий
Имя или ник:
Комментарий: