La transformación de un archivo de datos en la matriz con columnas de elementos idénticos?

votos
-1

Tengo un archivo de datos muy grande que tiene un formato como a continuación:

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

Estoy tratando de cargar estos datos en Matlab. Mi objetivo es crear una matriz que tiene elementos idénticos por una columna y si algún valor falta llenarlo con cero. Por lo que el resultado será algo parecido a continuación:

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

Alguien me puede dar una idea de códigos / fragmentos / enlaces para darse cuenta de esto?

Publicado el 19/09/2018 a las 17:13
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

DE ACUERDO. Aquí es cómo lo hice ( test.dates el nombre del archivo con los datos de entrada):

%// 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
Respondida el 20/09/2018 a las 09:11
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more