1

Matlabには、異なる長さのビンに分割してサイズを縮小したいベクトルMuenがあります。このベクトルには、高精度のビンが必要ないくつかの値と、ほぼ同じで最大数百の値のサイズのビンに収集できる多くの値があります。また、sencod ベクトルフルエンスを短縮するために、新しいビンに入るすべての古いビンのインデックスを知る必要があります。

目標は、 Meunによって決定された異なるサイズのビンを使用して2 つのベクトル sum(fluence .* Muen ) の合計を高速化しベクトル乗算の前にフルエンスの合計を新しいビンに入れることです。このために私は使用しようとします

edges=[min(Muen):0.0001:Muen(13),Muen(12:-1:1)); 
[N,bin]=histc(*Muen*,edges) 

Muenの最大値と最小値の差が大きく、それ以外の値の差が小さいため、ベクトルのエッジをどのように作成するかが問題です。導関数Muenに応じてエッジのステップを作成する方法はありますか?

Muenの短いバージョンを取得するには、次のようになります

MuenShort=N.*edges;  

しかし、それはうまくいきませんでした(エッジの障害である可能性があります)、何か提案はありますか?

また、ビンが新しいビンに入る値のインデックスをどのように与えるか、実際にはわかりませんか?

明確化:私がやりたいのは、ベクトルmまたはMuenから、ほぼ等しい要素を取り、 を 1 つの要素に置き換え、同時に要素が新しいベクトルnまたはMuenShortに入るインデックスを追跡することです。例 {m1}->n1,(1), {m2}->n2,(2), {m3,m4}-> m3=m4=n3,(3,4),{m5,m6,m7,m8 }-> m5=m6=m7=m8=n4,{5,6,7,8}... ここで n1>>n2 ですが、n3 と n4 の差はそれほど大きくないかもしれません。各 n 要素の m 要素の数は、互いにほぼ等しい、または 2 つの制限の間にある m 要素の数によって決定する必要があります。そのため、ビンのサイズは 1 要素から数百要素の間で変化するはずです。次に、インデックスを使用してフルエンス
を作成したいベクトルが短い

FluenceShort(1:length(MuenShort))= [sum(fluence(1)),sum(fluence(2)),sum(fluence(3,4)),sum(fluence(5,6,7,8)) ...]; ゴール=合計(fluenceShort.*MuenShort)

これを Matlab で実装する方法はありますか?

4

1 に答える 1

1

あなたの質問を明確に理解していなくても、これをお勧めします。おそらく、ベクトルをソートmuenし、固定数を選択し、n各ビンを定義して、正確にnの値が含まれるようにすることができますmuen。簡単にするために、 の長さはmuenの倍数であると想定されますn

n = 10;
m = length(muen_sorted)/n; 
muen_sorted = sort(muen);
edges = [-inf mean([muen_sorted(n:n:end-1); muen_sorted(n+1:n:end)]) inf ];
muen_short = mean(reshape(muen_sorted,n,m));

ビンに対応するm+1エッジ (ベクトル) が取得されることに注意してください。ビンのエッジは、隣接するビンの最も近い値の間に正確に位置します。したがって、最初のビンの上端はです。次のビンの上端はなどです。edgesm(muen_sorted(n)+muen_sorted(n+1)/2(muen_sorted(2*n)+muen_sorted(2*n+1)/2

各ビン (ベクトルmuen_short) の「代表値」は、そのビンにある値の として計算されmeanます。またはmedian、アプリケーションによっては、より理にかなっているかもしれません。

このコードの結果として、はエッジと;muen_short(1)を持つビンに対応する値です。は、エッジおよびなどを持つビンに対応する値です。edge(1)edge(2)muen_short(2)edge(2)edge(3)

変数を使用して、同じエッジを持つedgesヒストグラムを作成できるようになりました。fluence

于 2013-08-08T23:00:48.550 に答える