загрузить данные из текстового файла, используя матричный разделитель - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь прочитать текстовый файл, который содержит данные для нескольких матриц, и загрузить их в разные матрицы в Matlab. Пример моего текстового файла выглядит так:

19,623 -15,67 42,995
17,942 -10,923 47,112
23.806 -14.332 49.912
21,582 -11,218 46,203
18,031 -12,567 44,381
15,931 -18,897 39,046
18,497 -17,457 44,327

17,548 -18.604 44,24
15,931 -18,897 39,046
18,43 -16,582 43,091
18,497 -17,457 44,327
16,695 -17,627 39,364
17,548 -18,604 44,24

20,436 -16,416 44,281
17,984 -16,918 44,441
14,703 -17,17 40,697
17,078 -18,111 44,22
16,322 -16,342 38,961
19,582 -18,281 39,937
14,941 -16,27 39,53
18,43 -16,582 43,091

Этот файл представляет три матрицы, где размеры первой, второй и третьей матриц равны 7x3, 6x3 и 8x3 соответственно. Матрицы разделены новой строкой. Я попытался с помощью команды S = LOAD (FILENAME), но эта команда создает матрицы 21x3, которая является объединением всех строк. Как я могу определить матричный разделитель (разделитель) для моих матриц, чтобы он создавал разные матрицы на основе разных сегментов моего файла? Обратите внимание, что число всех столбцов всегда равно 3.

Спасибо миллион за вашу помощь. Я действительно ценю это.

1 Ответ

2 голосов
/ 20 сентября 2011

Если в ваших данных нет значений NaN, вы можете использовать textscan с разделителем \n. Он генерирует значения NaN, когда читается пустая строка. Не очень элегантно, но делает свое дело. Я уверен, что есть много других способов сделать это.

fid=fopen('data','r');
data=textscan(fid,'%f','delimiter','\n');
fclose(fid);
data=cell2mat(data);
index=find(isnan(data));
A=data(1:index(1)-1);
B=data(index(1)+1:index(2)-1);
C=data(index(2)+1:end);
A=reshape(A,[3 length(A)/3])';
B=reshape(B,[3 length(B)/3])';
C=reshape(C,[3 length(C)/3])';

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...