импорт и расчет данных в matlab - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю с набором данных около 50 Гб, поэтому я решил работать «частями», вызывая и удаляя каждый набор данных после каждого расчета. У меня есть 8 различных файлов .mat, каждый из которых содержит ячейку {1,5}, которая содержит каждый массив (1,50) и, наконец, 2d массив (1024,1024). У меня вопрос, могу ли я как-то изменить имя массива, содержащего эти данные внутри вычисления l oop? Код ниже.

ld = [5,10,15,20,25,50,75,100];

for i=1:8

    load(sprintf('U%i.mat',ld(i)));

    for a = 1:1024
        for b = 1:1024
            for c = 1:50
                stad_pmmh(c) = 'U_%i{c}(a,b);   %%%%Here is the main issue and where i need a "dynamical naming"
            end
            STAD_pmmh{a,b} = stad_pmmh;
            dev_pmmh(a,b) = std(STAD_pmmh{a,b});
        end
    end

    save(sprintf('dev_%i',ld(i)),'dev_pmmh');
%     
    clear (sprintf('U_%i',ld(i)));
end


1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете загрузить содержимое .mat в структуру, запрашивая выходной аргумент при загрузке данных. А затем используйте динамическое именование полей c для доступа к вашим данным.

Чтобы загрузить данные из файла .mat в структуру, используйте

data = load('filename');

Каждая переменная в .mat будет стать полем в структуре. В вашем случае

data = load('U5');
data.U5

И затем вы можете получить доступ к полям структуры через динамическое имя c:

my_field = 'U5';
data.(my_field)

В вашем случае:

file_name = sprintf('U%i',ld(i))
data = load(file_name); % You don't need the .mat extension to load a .mat file
[...]
stad_pmmh(c) = data.(file_name){c}(a,b);

Ссылка в справке Matlab:

load: загрузить переменные из файла в рабочую область

Создать имена полей из переменных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...