0

我需要 matlab 帮助,使用“strtok”在文本文件中查找 ID,然后读入或操作该 ID 所在行的其余部分。我还需要这个函数来查找(最好使用 strtok)相同 ID 的所有出现并以某种方式对它们进行分组,以便我可以找到平均值。关于示例代码:

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 发生变化,并且适用于一整套不同的 ID,然后它们再次作为一个整体重复,想想 [1,2, 3],[1,2,3],主要区别是ID后面的值,我需要在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

感谢您的任何帮助。

4

1 回答 1

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=6ID = 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

...用于进一步计算。

于 2013-10-13T22:09:43.723 回答