2013-10-11 1 views
0

Мне нужна помощь с помощью matlab с помощью 'strtok', чтобы найти идентификатор в текстовом файле, а затем прочитать или обработать остальную часть строки, содержащуюся там, где этот идентификатор. Мне также нужна эта функция, чтобы найти (используя strtok предпочтительно) все вхождения того же ID и сгруппировать их каким-то образом, чтобы найти средние значения. На в образце кода:Матовая манипуляция Matlab

ID list being input: 
(This is the KOIName variable) 
010447529 
010468501 
010481335 
010529637 
010603247......etc. 

File with data format: 
(This is the StarData variable) 
ID>>>>Values 

002141865 3.867144e-03 742.000000 0.001121 16.155089 6.297494 0.001677 

002141865 5.429278e-03 1940.000000 0.000477 16.583748 11.945627 0.001622 

002141865 4.360715e-03 1897.000000 0.000667 16.863406 13.438383 0.001460 

002141865 3.972467e-03 2127.000000 0.000459 16.103060 21.966853 0.001196 

002141865 8.542932e-03 2094.000000 0.000421 17.452007 18.067214 0.002490 

Не вводить в заблуждение примеры, я отвечал, что первое число повторяется в течение приблизительно 15 линий, то изменения ID и который идет в течение целого набора различных идентификаторов, то они повторить как целую группу, подумайте [1,2,3], [1,2,3], основное отличие - значения, возвращающие идентификатор, который мне нужно усреднить в matlab.

Мой текущий код:

function Avg_Koi 

N = evalin('base', 'KOIName'); 

file_1 = evalin('base', 'StarData'); 

global result; 

for i=1:size(N) 
[id, values] = strtok(file_1); 
result = result(id); 
result = result(values) 
end 

end 

Спасибо за любую помощь.

+0

Что такое «результат»? Вы не можете использовать одно и то же слово, чтобы идентифицировать как переменную, так и функцию. И затем вы используете его для идентификатора и значений. А? – dmm

+0

Также, предполагая, что evalin работает над «StarData» (и я не уверен, что это будет), file_1 не будет переменной char, поэтому вы не сможете использовать strtok на нем. Введите «whos» (без кавычек), чтобы увидеть ваши переменные. – dmm

+0

У меня возникли проблемы с пониманием вашего вопроса, но я уверен, что вы хотите использовать «нагрузку», а не «evalin». Введите «справочная нагрузка». Вы не хотите оценивать выражения в KOIName и StarData (так как их нет), вы просто хотите загрузить эти данные в переменные Matlab, с которыми вы можете манипулировать. – dmm

ответ

1

Вы позволили нам угадать много, так что я предполагаю, что вы хотите что-то вроде этого:

load StarData.txt 

IDs = { 010447529; 
     010468501; 
     010481335; 
     010529637; 
     010603247; 
     002141865} 

L = numel(IDs); 
values = cell(L,1); 

% Iteration through all arrays and creating an cell array with matrices for every ID 
for ii=1:L; 
    ID = IDs{ii}; 
    ID_first = find(StarData(:,1) == ID,1,'first'); 
    ID_last = find(StarData(:,1) == ID,1,'last'); 

    values{ii} = StarData(ID_first:ID_last , 2:end); 
end 

Когда вы теперь получить доступ к индексу ii=6 адресация в ID = 002141865

MatrixOfCertainID6 = values{6}; 

вы получите:

0.0038671440 742  0.001121 16.155089 6.2974940 0.001677 
0.0054292780 1940 0.000477 16.583748 11.945627 0.001622 
0.0043607150 1897 0.000667 16.863406 13.438383 0.001460 
0.0039724670 2127 0.000459 16.103060 21.966853 0.001196 
0.0085429320 2094 0.000421 17.452007 18.067214 0.002490 

... для дальнейших расчетов.

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