Как создать матрицу из текстового файла в MATLAB? - PullRequest
9 голосов
/ 19 июня 2009

У меня есть текстовый файл, который имеет 4 столбца, каждый столбец имеет 65536 точек данных. Каждый элемент в строке разделен запятой. Например:

X,Y,Z,AU
4010.0,3210.0,-440.0,0.0
4010.0,3210.0,-420.0,0.0
etc.

Итак, у меня есть 65536 строк, каждая строка имеет 4 значения данных, как показано выше. Я хочу преобразовать это в матрицу. Я попытался импортировать данные из текстового файла в файл Excel, потому что таким образом было легко создать матрицу, но я потерял более половины данных.

Ответы [ 5 ]

22 голосов
/ 19 июня 2009

Если все записи в вашем файле являются числовыми, вы можете просто использовать a = load('file.txt'). Следует создать матрицу 65536x4 a. Это даже проще, чем csvread

9 голосов
/ 23 марта 2012

Вы когда-нибудь пробовали использовать 'importdata'? Для параметров нужны только имя файла и разделитель.

>> tmp_data = importdata('your_file.txt',',')

tmp_data = 

          data: [2x4 double]
      textdata: {'X'  'Y'  'Z'  'AU'}
    colheaders: {'X'  'Y'  'Z'  'AU'}


>> tmp_data.data

ans =

        4010        3210        -440           0
        4010        3210        -420           0

>> tmp_data.textdata

ans = 

    'X'    'Y'    'Z'    'AU'
8 голосов
/ 19 июня 2009

Вместо того, чтобы связываться с Excel, вы сможете читать текстовый файл непосредственно в MATLAB (используя функции FOPEN , FGETL , FSCANF и FCLOSE ):

fid = fopen('file.dat','rt');  %# Open the data file
headerChars = fgetl(fid);      %# Read the first line of characters
data = fscanf(fid,'%f,%f,%f,%f',[4 inf]).';  %'# Read the data into a
                                              %# 65536-by-4 matrix
fclose(fid);  %# Close the data file
7 голосов
/ 19 июня 2009

Самый простой способ сделать это - использовать функцию MATLAB csvread.

Существует также этот инструмент, который читает файлы CSV.

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

5 голосов
/ 23 июня 2009

Предлагаю вам ознакомиться с dlmread и textscan.

dlmread похоже на csvread, но поскольку он может обрабатывать любой разделитель (табуляция, пробел и т. Д.), Я склонен использовать его вместо csvread.

textscan - настоящая рабочая лошадка: множество опций, + она работает с открытыми файлами и немного более устойчива к обработке «неверного» ввода (например, нечисловые данные в файле). Его можно использовать как fscanf в предложении gnovice, но я думаю, что это быстрее (хотя не цитируйте меня об этом).

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