2014-10-20 4 views
2

У меня очень короткий и простой вопрос. Это то, что я имею дело с:Динамическое заполнение 3D-матрицы из 2D-матрицы

%% Load all samples 
nazwa = dir('*.asc'); 
temp = zeros(1,1); 
A = zeros(1,1,1); 

for i = 1:25 
    filename = nazwa(i).name; 
    temp = importfile(filename); 
    A(:,:,i) = temp; 
end 

temp матрица 4096x2, и я хочу, чтобы иметь 4096x2x25 матрицу A в качестве результата. С помощью этого кода я получаю ошибку Assignment has more non-singleton rhs dimensions than non-singleton subscripts . Я знаю, что я могу использовать ячейки или создавать большую временную матрицу, которая будет содержать все данные сразу, а затем преобразовать их в 3D-матрицу, но я хочу знать, что не так с моим мышлением. Это индексирование? Я нашел аналогичную проблему: http://www.mathworks.com/matlabcentral/answers/57275-adding-values-to-3d-matrix, но это не совсем для меня.

ответ

1

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

Почему Matlab не позволяет вам?

Представьте себе, что матрица temp меняет размер каждой итерации (вы знаете, это не так, но Matlab не знает), то какой размер будет A? Как должен Matlab изменить его размер?

Таким образом, если вы хотите делать то, что вы делаете, вам необходимо предварительно распределить A. Если вы сообщите Matlab, что A=zeros(2096,2,25), то у вас не возникнет проблема.

+0

+1 для вас, юг, это действительно сработало. Не могли бы вы рассказать мне, каковы правила изменения размера матрицы в цикле? Раньше я делал подобный материал, предварительно создавая матрицы, как здесь, - с одиночной нулевой матрицей, и у меня никогда не было такой ошибки. –

+0

"подобные вещи"? Как что? В общем, если вы хотите получить доступ к чему-то вроде A (:, N), тогда A должен быть предварительно назначен. –

+0

'Yssmini = нули (1,1); Yssmin = нули (1,1); для i = 1: размер (GROOVES_VALUES, 2)% находит точный индекс минимумов в каждом столбце Yss Yssmin (1, i) = min (Yss3d (:, 1, i)); j = find (Yss3d (:,:, i) == Yssmin (1, i)); Yssmini (1, i) = j; end. Вот, например, я предварительно разделил Yssmin на одну по отдельности матрицу, и код все еще работает. –

Смежные вопросы