Лучшим вариантом почти наверняка является простое чтение файла один раз в скрипте или управляющей функции, а затем передача его в качестве переменной для любых последующих функций, которым требуются эти данные. Это такая же работа, как и добавление глобальных деклараций, и она чище, удобнее в обслуживании и более гибка.
Вы также можете сохранить переменную в файле MAT. Если каждый элемент в вашем файле имеет тип double
, его размер должен превышать 4 ГБ. Формат MAT эффективен, но главное преимущество заключается в хранении ваших чисел в виде чисел, а не текста. С 5 или 8 значащими цифрами одинаковые числа в ASCII занимают 6,2 или 9,3 ГБ соответственно.
Если по какой-то причине вы действительно не хотите передавать данные как переменную, я бы порекомендовал вложенные функции над глобальными переменными:
function aResult = aFunction(var)
data = dlmread(...);
var4 = bFunction(var);
function bResult = bFunction(var)
var4 = cFunction(data);
end
end
Конечно, в этот момент вы все еще оборачиваете бизнес-функции во что-то. полезные правила полезны.
Теперь, если проблема real - это просто размер этого файла, то есть он слишком велик для памяти, и вы используете аргументы диапазона для dlmread
для доступа к файлу в виде кусков - тогда вы вероятно, потребуется для разработки формата для использования с memmapfile
. Эта страница Википедии объясняет потенциальные выгоды.
Тогда есть решение о грубой силе .