преобразование многих текстовых файлов в массив ячеек в Matlab - PullRequest
0 голосов
/ 04 января 2019

У меня есть 812 текстовых файлов в одной папке и 649 текстовых файлов в другой папке (эти текстовые файлы являются дескрипторами изображений), и каждый из текстовых файлов содержит около 3000 номеров с этим шаблоном: первые 5 чисел - это расположение дескрипторов, а 128 - следующие.числа - это значения, которые я хочу сохранить в виде столбца в массиве ячеек, и этот шаблон повторяется до конца текстового файла.и моя цель - извлечь все дескрипторы из массива ячеек 128 * n, где n - количество дескрипторов для всех изображений.вот мой код для извлечения всех дескрипторов всех текстовых файлов в одном массиве ячеек

function cel = affinedesc(fname)


FID = fopen(fname, 'r');
content = textscan(FID, '%s');
content = content{1,1};
cel = cell(1,str2num(content{2,1}));
content = content(3:end);
  fclose(FID);

counter = 1;
for i=1:133:length(content)-1
t1 = i+5;
t2 = i+4+128;
cel{counter} = content(t1:t2);
counter = counter+1;


end

cel = cat(2,cel{:});
end

function descscel = affinedescs(dir) 

desccel = {};
for i=1:length(dir)
fname = dir(i).name;
cel = affinedesc(fname);
desccel{i} = cel;
end
descscel = cat(2,desccel{:});%here my pc freezes!

end

теперь вот мой вопрос: он работает правильно, но последняя ячейка не отображается в matlabрабочей области, и я не могу сохранить последнюю ячейку для всех текстовых файлов, так как она объединяет все ячейки всех текстовых файлов, и экран моего компьютера зависает.Я думаю, это потому, что мой последний массив ячеек слишком БОЛЬШОЙ, я хотел знать, есть ли лучший способ?

любая помощь приветствуется!

1 Ответ

0 голосов
/ 04 января 2019

Можете ли вы проверить, что память вашего компьютера заканчивается?(Например, через диспетчер задач в Windows.)

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

Кроме того, в строке есть опечатка, которая замораживает ваш компьютер.Переменная descel создана в другом месте?

Я знаю, что это не может считаться ответом, но у меня недостаточно репутации, чтобы оставлять комментарии.

...