2010-09-07 3 views
0

Если я использую функцию загрузки с помощью MATLAB я обычно в конечном итоге делает что-то вроде этого:Matlab: Загрузка файлов

temp = load('filename.mat'); 
realData = temp.VarName; 
clear temp 

или

realData = load('filename.mat'); 
realData = realData.VarName; 

является любой из этих методов превосходную устойчивость к другим, особенно с точки зрения использования памяти? Или существует более прямой подход, чтобы избежать этой временной структуры?

Thx Томас

ответ

0

Ну, если вы просто делаете load('filename.mat');, все переменные в конечном итоге в текущей области.

Я сомневаюсь, что есть сколько-нибудь значительная стоимость памяти для любого из ваших методов. Matlab использует copy-on-write.

+0

Но если вы хотите использовать load() в функции, им не нужно, чтобы они оказались в рабочей области ?! Кроме того, в первом случае нет временного размера используемой переменной 2x? – Thomas

+2

@Thomas: Извините, я исправил свое редактирование. Они попадают в текущий объем. Нет, в памяти не используется в два раза больше, потому что за кулисами «realData» и «temp.varName» будут указывать на одну и ту же структуру данных (пока эти данные не будут изменены). –

6

Если вы знаете, что вам нужно только определенные переменные из вашего matfile, вы можете сделать

realData = load('filename.mat', 'VarName'); 

Смотрите Matlab documentation для получения дополнительной информации о команде загрузки.

+0

, но это также создаст структуру. единственным исключением является то, что у структуры есть только realData.VarName вместо возможных нескольких полей. – Thomas

+3

, тогда просто выполните 'load ('filename.mat', 'VarName');' и переменная VarName окажется в вашей текущей области, а не в структуре. – groovingandi

0

Вы можете попробовать использовать «ImportData» Команда:

szFilePath = 'c:\dirName\myData.mat'; 
    myData = importdata(szFilePath); 

Это позволяет избежать неявного размещения переменных в область видимости, когда нагрузка используется при отсутствии выходных параметров, а также ненужное назначение-from- struct.

Как отмечает Оли, поведение ленивой копии (копирование при записи) означает, что соображения памяти являются спорными.

С точки зрения обслуживания/читаемости зрения ImportData имеет несколько преимуществ:

  1. Явное имен переменных, которые создаются в рабочей документации, что функция делает гораздо более четко.
  2. Удаление необходимости в операции присваивания из структуры позволяет удалить отвлекающие и нерелевантные операции из исходного файла.

Я использую MATLAB R2010a.

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