2016-04-17 1 views
0

Я работаю над проблемой, когда у меня есть массив A из 100 элементов. Все эти 100 элементов меняются со временем. Итак, в моем рабочем пространстве я получаю только окончательные значения всех этих элементов после того, как весь цикл времени был запущен.Как сохранить динамическую переменную из рабочей области в отдельном файле в Matlab?

Я пытаюсь сохранить значения со временем в отдельном файле (.txt или .mat), чтобы я мог получить доступ к этому файлу, чтобы проверить, как переменная изменяется со временем.

Я пытаюсь следующую команду:

save('file.mat','A','-append'); 

Но эта команда переписывает существующие значения в моем файле.

Просьба предложить мне способ сохранить эти значения без их перезаписи, а также узнать, как получить к ним доступ в MATLAB.

ответ

0

Причина, по которой сохранение файла (даже с использованием флага -append) не работает, связано с тем, что переменная A уже существует в файле и будет переписываться каждый раз через цикл. Вам нужно будет создавать новый файл или новое имя переменной каждый раз через цикл, чтобы этого не произошло.

Сохранение результатов в файле, вероятно, не является наилучшим способом хранения изменяющихся во времени значений A. Вам было бы лучше использовать массив ячеек для хранения всех промежуточных значений A.

A_over_time = cell(); 

for k = 1:n 
    %// Get A somehow 
    A_over_time{k} = A; 
end 

В зависимости от того, что A есть, вы можете также хранить значения A в числовой массив или матрица.

%// Using an array 
A_over_time = zeros(N, 1); 
for k = 1:N 
    A_over_time(k) = A; 
end 

%// Using a matrix 
A_over_time = zeros(N, numel(A)); 
for k = 1:N 
    A_over_time(k,:) = A; 
end 
+0

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

+0

@RiderV Если они действительно такие большие (насколько велики мы говорим?), То загрузка их с диска будет еще медленнее. – Suever

2

Вы также можете изменить имя выходного файла должно быть уникальным для каждой итерации:

for iter=1:n 
    A = rand(10); 
    save(sprintf('file%d.mat',iter), 'A'); 
end 

Таким образом, при каждой итерации создается один файл.