Как @Rashid предлагает использовать массивы ячеек вместо числовых массивов. Красота клеточных массивов заключается в том, что он может хранить матрицы различного типа и размера в 1 ячейке памяти. Он очень похож на структуру, но с индексами легко вызывать записи.
X=[1 6 9 5; 6 36 54 30; 9 54 81 40; 5 30 40 25];
for ii=1:size(x,1)
bb=X(ii:end,1)*X(ii,ii:end);
BB=bb(triu(true(size(bb))))
Bv{ii,:}=BB(:);
end
Обратите внимание, что я также изменил свой индекс цикла, чтобы использовать ii
в отличие от i
см here. i
- это мнимое устройство и для предотвращения ошибок лучше не перезаписывать встроенные функции.
Просто пример того, как массив ячеек хранит различные типы данных и размеры:
A = magic(2); % 2x2 double
B = uint8(magic(3)); % 3x3 uint8
C = 'hello world'; % string
YourCell{1} = A;
YourCell{2} = B;
YourCell{3} = C;
YourCell =
[2x2 double] [3x3 uint8] 'hello world'
То же самое, но теперь в качестве структуры:
YourStruct.magic2double = A;
YourStruct.magic3uint8 = B;
YourStruct.MyString = C;
YourStruct =
magic2double: [2x2 double]
magic3uint8: [3x3 uint8]
MyString: 'hello world'
Ячейка и структура содержит ту же самую информацию, но для информации в ячейке вы вызываете YourCell{ii}
, в то время как в структуре вы должны позвонить YourStruct.variablename
. К ячейке можно получить доступ путем индексирования, структура не может. Для структуры, однако, вы можете использовать простые имена, чтобы помнить, что вы храните в каждом элементе, в то время как это невозможно для ячейки.
Потому что 'BB' изменяет размер на каждой итерации. – Rashid
@ Камтал вы правы, но как сохранить значение BB? –
Вы можете использовать 'Bv {i,:} = BB (:);' – Rashid