Генерация переменной в виде буквенно-числового кода и несколько mat-файлов из одного большого
Приветствую,
В матлабе совсем новичек, помогите решить несколько задачек. .
1) Нужно провести вычисления с матрицей произвольного размера (потенциально большого, на сотни тысяч строк) :
Есть mat-файлы A и B содержащие матрицы day (все даты измерений включая мастер дату), master_day (мастер дата в одной ячейке) и ph (массив с измерениями).
По количеству столбцов ph всегда меньше на один чем day (т.е. в нем нет столбца соотвествующего мастер дате), но нужно его найти и добавить нулевым в массив ph.
Далее, последовательно вычесть из всех столбцов значения первого, а потом его сделать нулевым. Все сохранить в тот же массив. Для этого руками пользуюсь строкой ph(:,2:end)=ph(:,2:end)-ph(:,1);
2) Требуется сгенерить переменную (code_n), содержащую произвольный буквенно-числовой код для каждой строки в исходной матрице (ph).
Есть вот такой рабочий код, но не знаю как его зациклить на количество строк в исходной матрице и на сколько он будет быстро выполняться если у нас условно 1 млн. строк.
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
numRands = length(s);
sLength = 5;
code_n = s( ceil(rand(1,sLength)*numRands) )
3) Как разбить один большой mat-файл на несколько по 2 Gb? Например, если исходный = 3Gb, разбить на - 2 и 1Gb, соответственно. Далее сделать конвертацию из каждого mat-файла в txt последовательно - dlmwrite('Export.txt', Export, 'precision',10.
Спасибо.
Ответы
1) Вычитайте сразу из всей матрицы ph первый столбец, тогда он автоматически обнулится
2) Не надо зацикливать код, делайте сразу матрицу строк
3) Чтобы разбить файл, надо считать из него данные, разбить их на переменные, и их сохранять в отдельные файлы. Если оперативной памяти компьютера не хватает, чтобы полностью считать данные из mat-файла, можно воспользоваться fileDatastore, чтобы обработать Big Data. Для этого придется изучить документацию
https://www.mathworks.com/help/matlab/ref/matlab.io.datastore.filedatastore.html
Конвертацию в текст тоже надо делать вручную, например, с помощью приведенного кода. Для нескольких mat-файлов надо в цикле пройтись по каждому, чтобы считать и сохранить в текст, либо опять-таки применить fileDatastore, он сам по всем указанным файлам пройдется.