Как я могу объединить эти данные в MATLAB? - PullRequest
1 голос
/ 18 июня 2010

В приведенном ниже примере текстового файла, если в столбце 3 содержится 1, соответствующие данные столбца 2 должны быть объединены с данными предыдущей строки в столбце 2. Например, 40 в строке 2 следует добавьте к 10 в строке 1, затем в строке 2 должно быть установлено значение 0 (как показано в измененном текстовом файле примера). Проблема с моим кодом ниже состоит в том, что он записывает только изменения в текущих данных time(i,1), но не изменения, сделанные для предыдущих данных.

original.txt    
    a  time c
    1  10   0
    2  40   1
    3  20   0
    4  11   0
    5  40   1

modified.txt    
    a  time c
    1  50   0
    2  0    0
    3  20   0
    4  51   0
    5  0    0




fid=fopen('data.txt');
A=textscan(fid,'%f%f%f');

a   =A{1};
time=A{2};
c   =A{3};

fclose(fid);

fid=fopen('newData.txt','wt');

for i=1:size(a)
  if c(i,1)==1
    time(i-1,1)=time(i,1)+time(i-1,1); % merge the time of the current and the previous
    time(i,1)  =0; %set the time to 0

    array = []; %empty the array
    array = [a(i,1) time c(i,1)]; add new data
    format short g;
    fprintf(fid,'%g\t %g\t %g\n',array);
end
fclose(fid)

1 Ответ

0 голосов
/ 18 июня 2010

Причина, по которой текущее значение time записано правильно, а предыдущее - нет, заключается в том, что вы уже записали предыдущее значение в файл на предыдущей итерации цикла, поэтому нет никакого способадля вас, чтобы изменить это.Вам нужно удалить печать из цикла и добавить ее после того, как вы отрегулируете все значения time.

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

a = [1; 2; 3; 4; 5];          %# Sample data
time = [10; 40; 20; 11; 40];  %# Sample data
c = [0; 1; 0; 0; 1];          %# Sample data

index = find(c == 1);                %# Find indices where c equals 1
temp = time(index);                  %# Temporarily store the time values
time(index) = 0;                     %# Zero-out the time points
time(index-1) = time(index-1)+temp;  %# Add to the previous time points
c(index) = 0;                        %# Zero-out the entries of c

fid = fopen('newData.txt','wt');              %# Open the file
fprintf(fid,'%g\t %g\t %g\n',[a time c].');  %'# Write the data to the file
fclose(fid);                                  %# Close the file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...