Преобразование файла данных в матрицу со столбцами одинаковых элементов? - PullRequest
0 голосов
/ 19 сентября 2018

У меня очень большой файл данных, который имеет следующий формат:

1 2 3 4 6 7 8
1 2 3 4 6
1 2 3 5 4 6
1 2 3 4 6
1 2 3 4 6
1 2 3 4 6 8

Я пытаюсь загрузить эти данные в Matlab.Моя цель состоит в том, чтобы создать матрицу, которая имеет идентичные элементы на один столбец, и если какое-либо значение отсутствует, заполните его нулем.Таким образом, результат будет примерно таким:

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

Может кто-нибудь дать мне какую-нибудь идею / фрагменты кода / ссылки, чтобы понять это?

1 Ответ

0 голосов
/ 20 сентября 2018

OK.Вот как я это сделал (test.dat - имя файла с входными данными):

%// The first section reads the dat file and fills missing entries in columns with zeros
fid = fopen('test.dat');
textLine = fgets(fid); % Read first line.
lineCounter = 1;
while ischar(textLine)
    % get into numbers array.
    numbers = sscanf(textLine, '%f ');
    % Put numbers into a cell array IF and only if
    % you need them after the loop has exited.
    % First method - each number in one cell.
    for k = 1 : length(numbers)
        ca{lineCounter, k} = numbers(k);
    end
    % ALternate way where the whole array is in one cell.
    ca2{lineCounter} = numbers;

    % Read the next line.
    textLine = fgets(fid);
    lineCounter = lineCounter + 1;
end
fclose(fid);
emptyIndex = cellfun(@isempty,ca);       %# Find indices of empty cells
ca(emptyIndex) = {0};                    %# Fill empty cells with 0
A=cell2mat(ca);

%// The second section with create a new matrix AA from A matrix
%// which will be a unique entry in each column with missing entries as zero
uniq=unique(A);
row=size(A);
row=row(1);
%not considering zero

AA=zeros(row,uniq(end));
AA_idx=[];
for x=uniq(2):uniq(end)
    AA_idxr=mod(find(A==x),row);
    AA_idxr(AA_idxr==0)=row;
    AA_idxc=x*ones(length(AA_idxr),1);
%     AA_idxc(AA_idxc==0)=uniq(end)

    c=[AA_idxr AA_idxc];
    AA_idx=cat(1,AA_idx,c);
    c=[];
end

for i=1:length(AA_idx)
    index=AA_idx(i,:);
    a=index(1);
    b=index(2);
    AA(a,b)=b;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...