そして私の投稿に興味を示してくれてありがとう:)
使用しているデータについて簡単に説明します。
私はExcelからmatlabスクリプトへの重要なデータであるため、3つのベクトルになります。これらは:
- "FIT_txt"(各セルに混合文字と数字を含む約25万行。繰り返し入力)
- 「FIT_num」(数字のみを含む「FIT_txt」と同じ行数)
- 「セクター」(各セルに混合文字と数字を含む約5,000行。一意のエントリ)
今、私が達成したいこと:
「sector」の各行が「FIT_txt」に表示される回数をカウントするベクトルを作成します。例:「sector」の最初のエントリが「AB10」である場合、「FIT_txt」で「AB10」が発生する回数をカウントするベクトルを作成します。これは、新しいベクトルの最初の行に保存する必要があります。新しいベクトルの2行目は、「FIT_txt」などの「sector」(たとえば「AB11」)からの行2の出現をカウントします。
「sector」エントリに対応する「FIT_txt」のエントリと同じ行にある「FIT_num」のすべての数値を追加するベクトルを作成し、それに応じて並べ替えます。例:「sector」の行1の「AB10」は「FIT_txt」で3回発生します-行2、500、2000で発生します。「FIT_num」の行2、500、2000を合計して、新しいベクトルの最初の行。
さて、これは私の問題を単純化したものです。基本的に、私はより多くのデータを使用しており、このプロセスを繰り返して、はるかに多くの新しいベクトル/行列を見つけています。単純化に関して、私はこれを行うことによって問題を解決することができました:
units = zeros(length(sector),1);
installed = zeros(length(sector),1);
for a = 1:length(sector)
for z = 1:length(FIT_txt(:,1))
if strcmp((FIT_txt(z,1)),(sector(a)))==1
units(a,1) = units(a,1) + 1;
installed(a,1) = installed(a,1) + FIT_num(z,1);
end
end
end
残念ながら、これは非常に非効率的で、計算に時間がかかりすぎるのではないかと心配しています。
私はこれを使用して、私の最初の質問(出現を数える)に対してまともな結果を達成することができました:
units = zeros(length(sector),1);
for a = 1:length(sector)
units(a,1) = sum(strcmp((FIT_txt(:,1)),(sector(a)))
end
これは問題なく機能しますが(まだ少し時間がかかりますが)、2番目の質問(対応する「FIT_num」の値を数える)を解決する方法がわかりません。
私の問題を解決するのに可能な限り効率的な解決策を見つけるのを手伝っていただければ幸いです。
事前にどうもありがとうございました。
ジョン