Матрица матриц в MATLAB

Я ищу способ хранения большого количества переменных матриц в массиве в MATLAB.

Есть ли способы достичь этого?

Пример:

for i: 1:unknown myArray(i) = zeros(500,800); end 

Если неизвестная – это различная длина массива, я могу пересмотреть с дополнительной информацией, если это необходимо.

Обновление: производительность – основная причина, по которой я пытаюсь это сделать. Раньше у меня было это место, где он собирал данные как одну матрицу, показывал ее в реальном времени, а затем переходил к обработке следующего набора данных.

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

Обновление 2: Спасибо всем за предложения, однако я должен был заранее указать, что точность и скорость являются неотъемлемым фактором здесь, мне, возможно, придется заглянуть в исходный метод, прежде чем пытаться использовать 3-мерные массивы и переоценить метод для импорта данных.

6 Solutions collect form web for “Матрица матриц в MATLAB”

Если все матрицы будут иметь одинаковый размер (т.е. 500×800), тогда вы можете просто создать 3D-массив:

 nUnknown; % The number of unknown arrays myArray = zeros(500,800,nUnknown); 

Чтобы получить доступ к одному массиву, вы должны использовать следующий синтаксис:

 subMatrix = myArray(:,:,3); % Gets the third matrix 

Вы можете добавить несколько матриц в myArray несколькими способами:

 myArray = cat(3,myArray,zeros(500,800)); % OR myArray(:,:,nUnknown+1) = zeros(500,800); 

Если каждая matrix не будет того же размера, вам нужно будет использовать массивы ячеек, как предполагал Хозам.

EDIT: Я пропустил часть из-за нехватки памяти. Я предполагаю, что ваш nUnknown достаточно велик. Возможно, вам придется переключать тип данных матриц (один или даже тип uintXX, если вы используете целые числа). Вы можете сделать это при вызове нhive:

 myArray = zeros(500,800,nUnknown,'single'); 

Используйте ячейки массивов. Это имеет преимущество перед 3D-массивами в том, что для хранения всех матриц не требуется непрерывное пространство памяти . Фактически, каждая matrix может быть сохранена в другом пространстве в памяти, что избавит вас от ошибок при отсутствии памяти, если ваша свободная память fragmentирована. Вот примерная функция для создания ваших матриц в массиве ячеек:

 function result = createArrays(nArrays, arraySize) result = cell(1, nArrays); for i = 1 : nArrays result{i} = zeros(arraySize); end end 

Чтобы использовать его:

 myArray = createArrays(requiredNumberOfArrays, [500 800]); 

И для доступа к вашим элементам:

 myArray{1}(2,3) = 10; 

Если вы не можете заранее знать количество матриц, вы можете просто использовать динамическую индексацию MATLAB, чтобы сделать массив настолько большим, насколько вам нужно. Накладные расходы производительности будут пропорциональны размеру массива ячеек и не зависят от размера самих матриц. Например:

 myArray{1} = zeros(500, 800); if twoRequired, myArray{2} = zeros(500, 800); end 

myArrayOfMatrices = нули (неизвестно, 500 800), если у вас заканчивается память, бросайте больше бара в вашей системе и убедитесь, что вы используете 64-разрядную ОС. Также попробуйте уменьшить свою точность (вам действительно нужно удваивать или вы можете обойтись синглами: myArrayOfMatrices = single (неизвестно, 500 800);

Чтобы добавить к этому массиву try: myArrayOfMatrices (unknown + 1,:, 🙂 = zeros (500 800);

Я делал рендеринг объема в октаве (клон matlab) и создавал свои 3D-массивы (т. Е. Массив из 2d-fragmentов), используя

 buffer=zeros(1,512*512*512,"uint16"); vol=reshape(buffer,512,512,512); 

Потребление памяти показалось эффективным. (не может сказать то же самое для последующей скорости вычислений: ^)

если вы знаете, что неизвестно,

вы можете сделать что-то вроде

 myArray = zeros(2,2); for i: 1:unknown myArray(:,i) = zeros(x,y); end 

Однако прошло какое-то время с тех пор, как я в последний раз использовал matlab. поэтому эта страница может пролить свет на вопрос:

http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab_prog/f1-86528.html

просто делай это так

 x=zeros(100,200); for i=1:100 for j=1:200 x(i,j)=input('enter the number'); end end 
Interesting Posts

Apache HttpClient 4.1 – Прокси-аутентификация

Алгоритм рисования гладких эскизов iPhone

Проверка входного значения является целым числом

Создание прозрачного windows в C ++ Win32

Найти прикрепленные / связанные события элемента с помощью инструментов разработки Chrome / Firebug / IE

Значение <br типа java.lang.String не может быть преобразовано в JSONObject на android

Windows 8 не закрывается должным образом с быстрым запуском включено

Как исправить процесс загрузки из-за отказавшего жесткого диска? (Windows 7)

Блок ThreadPoolExecutor, когда очередь заполнена?

Android накладывает вид на все?

Используйте переменную окружения, чтобы указать на программу «Открыть с»

Get-Aduser -Filter не принимает переменную

Пакетное изменение размера изображений JPEG до фиксированного размера файла

Самый простой способ сделать огонь и забыть метод в C #?

Изменение шрифтов в ggplot2

Давайте будем гением компьютера.