2

私が行っているプロジェクトの問題で立ち往生しており、Matlab が数え切れないほどの時間を節約できることを望んでいました。
隣の列に対応する整数を持つ文字列を含む配列があります (パイプ ID と長さ)。対応する長さを持つ約 7000 のパイプ ID があります。

たとえば 200 個のパイプの ID を配列内の文字列として持っている場合、これらの 200 個の個々の文字列を大きな配列内で見つけて、MATLAB に ID 文字列の隣のセルにある対応するパイプの長さ (整数) を教えてもらうことは可能ですか? ?

私は試してみましたが、うまくismemberいきstrmatchません。

編集:
すべてのデータを含む大きな配列は次のようになります。

No.      ID                 Length (m)    
1        0-T103-0-T110      52.327    
2        0-T104-0-1370      30.4    
3        0-T104-0-1410      62.423    
4        0-T105-0-T109      46.611    
...    
7118     0415B-99878        152.242

次に、上記と同じ形式でより小さな配列を作成しますが、7118 行ではなく、たとえば 200 行になります。

私がこれまでに試したこと:

a = {'0-T103-0-T110', 52.327; '0-T104-0-1370', 30.4; '0-T104-0-1410', 62.423};
ismember(a(:,1), '0-T104-0-1370');
leng = a{ismember(a(:, 1), '0-T104-0-1370'), 2}

これは機能しますが、ご覧のとおり、小さな配列内で単一の文字列を見つけるためだけのものです。

次のように大きな配列をロードしました。

[num, text, raw] = xlsread('Pipelength_ALL.xlsx', 'A1:C7115');
4

1 に答える 1

3

ISMEMBERを使用したい。次に例を示します。

%# list of all pipe ID's and their length (100 in this example)
pipes = [cellstr(num2str((1:100)','pip%03d')) num2cell(randi(50,[100 1]))];

%# pipeID's of the query (10 here)
x = randperm(100);
p = cellstr(num2str(x(1:10)','pip%03d'));

%# find matching lengths
[~,loc] = ismember(p, pipes(:,1));
len = cell2mat(pipes(loc,2));

結果のサンプル:

>> [p num2cell(len)]
ans = 
    'pip096'    [14]
    'pip043'    [ 9]
    'pip095'    [27]
    'pip074'    [ 6]
    'pip001'    [ 3]
    'pip065'    [20]
    'pip067'    [ 8]
    'pip060'    [23]
    'pip051'    [27]
    'pip020'    [31]

編集:

投稿したデータを使用すると、コードは次のようになります。

pipes = {
    '0-T103-0-T110'      52.327
    '0-T104-0-1370'      30.4
    '0-T104-0-1410'      62.423
    '0-T105-0-T109'      46.611
}

p = {
    '0-T104-0-1370'
    '0-T105-0-T109'
}

[~,loc] = ismember(p, pipes(:,1));
[p pipes(loc,2)]
于 2012-07-03T11:13:50.367 に答える