0

持っているデータのより大きなマトリックスからサンプルを引き出すために使用したい文字列の配列が1つあります。現在、文字列の配列が1つあります1200x1。そして、私の実際のデータ'names'(値が対応するものを示す文字列配列6855x1、および'data'は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

次に、上記の値を使用して、'data'の実際のデータ値を使用して新しいベクトルをコンパイルします。

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

唯一の問題は、今リストした2番目のループのセットを実行していることです。これには、数時間かかることは明らかです。3つのループを設定せずにもっと速い方法があるに違いないと思います。誰かがより良い方法を知っていますか?

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 に答える