2016-09-21 7 views
0

Я попытался импортировать данные из текстового файла. Формат файла данных должен быть первой строкой, а char - это номера, как и файл xls. Но файл генерируется другим программным обеспечением в виде текстового файла, где все данные находятся в одной строке, причем один пробел разделен, а «вкладка» - как новая строка данных.Matlab importdata текстовый файл

Формат данных Я хочу, чтобы импортировать в MATLAB должен быть таким:

A B C D 
1 2 3 4 
5 6 8 8 
8 0 9 5 

Но теперь данные в текстовом файле

A B C D 1 2 3 4 5 6 8 8 8 0 9 5 

Как следует импортировать текстовый файл в matlab в матрице, как пожалуйста? Я попробовал importdata, но ans - ячейка 4x1. Моя версия Matlab - 2008 год.

Извините, что я очень новичок в Matlab. Спасибо.

Отредактировано: я понял, что данные

A B C D 1 2 3 4 5 6 8 8 8 8 0 9 5 7 0 8 8 8 5 0 9 9 

могли бы вы научить меня, как поместить эти вещи в клетку, с один символ/номер одной ячейки, пожалуйста?

A B C D 
    1 2 3 4 
5 6 8 8 8 
    8 0 9 5 
7 0 8 8 8 
    5 0 9 9 

Coz, когда я использую cell2mat, как это предложено, ошибка сбщ является CAT arguments dimensions are not consistent.

Большое спасибо!

+0

Поскольку у вас есть два различных типа (двойное и сажа), это не можно поместить все в одну матрицу. Вот почему '' mportdata' создает массив ячеек. – bushmills

+0

Почему вы все еще используете версию Matlab 2008 года? – Bernhard

+0

Не платите за лицензию, не так ли? = P –

ответ

1

Начнем с массива ячеек, сгенерированного из текстового файла. Я называю это A. Это 4x1. Или, может быть, 1x4? При следующей строке мы уверены, что мы начинаем с той же точки:

A = A(:); % make sure A is columnar 

A массив ячеек с первым элементом, содержащим имена и от 2-х до конечных чисел, содержащих как строку.


Случай 1: Последовательная размер каждой секции: Создание матрицы

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

Во-первых, нам нужно strread сделать вектор из строки (Вы также можете использовать textscan):

v = strread(A{2}) 

v = 

    1  2  3  4 

Теперь мы должны применять эту функцию на каждой ячейке и объединять векторы в матрице. Это может быть достигнуто с помощью cellfun, но так как мы должны сначала создать массив ячеек, в конце концов, мы должны cell2mat:

M = cell2mat(cellfun(@strread, A(2:end), 'UniformOutput', false)) 

Здесь M конечный результат.

M = 

    1  2  3  4 
    5  6  8  8 
    8  0  9  5 

Случай 2: Несогласованность в размерах + комбинирования обугленного/номер: Making массив ячеек

Мы хотим, чтобы преобразовать данные в массив ячеек с каждым элементом, занимающей одну ячейку. Начиная с первой строки celldata мы можем разбить строку имен в массив ячеек с помощью strsplit:

celldata = strsplit(A{1}); 

% maximum data count in each cell of A 
maxL = max(cellfun(@(x) numel(strsplit(x)), A)); 

% constructing an empty cell array to be filled with the data 
% the importance of this step dramatically increases with the data size! 
celldata{numel(A), maxL} = []; 

Теперь вы можете пройти через celldata и заполнить клетки его с соответствующими значениями:

for ii = 2:numel(A) 
    val = strread(A{ii}); 
    celldata(ii, 1:numel(val)) = num2cell(val); 
end 

celldata массив ячеек в этой форме:

celldata = 

    'A' 'B' 'C' 'D'  [] 
    [1] [2] [3] [4]  [] 
    [5] [6] [8] [8] [8] 
    [8] [0] [9] [5]  [] 
    [7] [0] [8] [8] [8] 
    [5] [0] [9] [9]  [] 
+0

Спасибо! Могу я спросить, пожалуйста? Я понял, что данные в текстовом файле имеют непостоянный размер. Это было похоже на «A B C D 1 2 3 4 5 6 9 8 8 8 8 0 9 5». Ошибка msg: «Параметры аргументов CAT несовместимы». – Cii

+0

Добро пожаловать @Cii. 2 вопроса: все ли согласованы, за исключением, может быть, последнего? И что вы предпочитаете делать с последним в этом случае? удалить его или расширить его нулями/NaNs? – erfan

+0

oh жаль, что комментарий просто не мог показать размер набора данных. Теперь данные представляют собой средний набор, который получил еще одну информацию. Таким образом, вместо 5,6,8,8 теперь это 5,6,8,8,8. Это теперь 1x5 double, в то время как другие - 1x4 double. Возможно, я отредактирую свой вопрос, чтобы лучше показать матрицу. – Cii

Смежные вопросы