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