0

我有一个字符串数组,我想用它来从我拥有的更大的数据矩阵中提取样本。现在我有一个字符串数组,1200x1. 我的实际数据“名称”(表示值对应的字符串数组,6855x1“数据”是6855x2.

这就是我想出的:

C = intersect(names,sites) %To find common strings

%要查找这些字符串在我的原始数据集中的位置:

Q=zeros(length(C),1)
for i=1:length(C)
    for j=1
   while strcmp(C(i),names(j))==0
       j=j+1
       Q(i)=j
   end 
    end
end

%然后使用上面的值来编译一个新向量,其中包含来自“数据”的实际数据值:

A=zeros(length(Q),1)
for i=1:length(Q)
A(i) = mock(Q(i),1)

唯一的问题是我正在运行我现在列出的第二组循环,很明显这需要几个小时。我认为必须有一种更快的方法,而无需设置三个循环。有谁知道更好的方法?

4

1 回答 1

0

首先要注意的是,您在 Q 上的循环可以轻松加速,如下所示:

A = mock(Q,1);

尽管我怀疑您的意思是数据(Q,2)。

如果您将您的名单存储在一个元胞数组而不是常规数组中,您应该能够进一步加快速度。假设数据是一个元胞数组、名称{1:6855} 和值列表编号(1:6855)。

A = zeros(length(C),1);
for i1=1:length(C)
    A(i1)=numbers(strcmp(C(i1),names));
end
于 2013-03-18T00:46:37.800 回答