2

我在做的一个项目中遇到了一个问题,希望 Matlab 可以为我节省无数小时。
我有一个包含字符串的数组,在它旁边的列中具有相应的整数(管道 ID 和长度)。我有大约 7000 个具有相应长度的管道 ID。

如果我有 200 个管道的 ID 作为数组中的字符串,那么是否可以在大数组中定位这 200 个单独的字符串并让 MATLAB 给我位于 ID 字符串旁边的单元格中的相应管道长度(整数) ?

我已经尝试过ismemberstrmatch但我无法让它工作。

编辑:
包含所有数据的大数组如下所示:

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 回答