Arrays 在较大数组中的小数组中查找单个字符串

Arrays 在较大数组中的小数组中查找单个字符串,arrays,string,matlab,Arrays,String,Matlab,我在做的一个项目中遇到了一个问题,希望Matlab能帮我节省无数的时间。 我有一个数组,数组旁边的列中包含字符串和相应的整数(管道ID和长度)。我有大约7000个具有相应长度的管道ID 如果我将200个管道的ID作为数组中的字符串,那么是否可以在大数组中定位这200个单独的字符串,并让MATLAB给我ID字符串旁边单元格中相应的管道长度(整数) 我已尝试使用ismember和stratch但无法使其正常工作 编辑: 包含所有数据的大型数组如下所示: No. ID

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

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

我已尝试使用
ismember
stratch
但无法使其正常工作

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

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
然后我会有一个更小的数组,其形式与上面相同,但是我会有例如200行而不是7118行

到目前为止,我所尝试的:

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');
你想用。以下是一个例子:

%# 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)]

谢谢你的快速回复。我无法重现上述内容,在尝试构造数组“p”时收到错误消息。但是我想我理解所使用的方法。@user1498416:我怀疑您有一个较旧的MATLAB版本,
randsample
的第二个参数尚未引入。尝试将该行替换为:
x=randperm(100);p=cellstr(num2str(x(1:10)’,'pip%03d')当我尝试使用代码'ismember'时,我被告知输入应该是字符串的单元格数组类型。我曾尝试使用“cellstr”转换它们,但数据似乎没有改变。。。我还假设只有“p”应该是这个类?因此,如果“p”是那个类,那么“pipes”应该是id的字符串和lenghts的整数,还是我遗漏了什么?在MathWorks上,他们说“ismember”将会改变,这可能与上述内容有关,以及为什么尽管输入与此处描述的内容非常相似,但我无法开始工作…@Anders:我不确定我是否理解你的评论,你能详细说明一下吗
pipes
包含整个数据,而
p
具有要提取的管道子集的ID。我们使用单元格数组而不是常规矩阵来存储数据,因为当我想通过编写“whos pipes”和“whos p”来查看类时,您的数据类型(字符串和数字)是混合的。这两个类的类都是“cell”。我已经使用[~,~,raw]=xlsread导入了数据,其中一列是字符串,另一列是“pipes”的数字。但我一直得到信息:???在28输入处使用==>cell.ismember时出错必须是字符串的单元格数组。错误==>管道查询在14[~,loc]=ismember(p,管道(:,1));我不知道截图是否能让它更清晰?