2011-07-22 5 views
1

私はいくつかの4D画像データを持っています.384×276×20×5です。ここで、data(X,Y,T,V),X = x location,Y = y location,T = time,V = vessel locationです。4D画像データの平均値と最大値はどのようにして計算できますか?

時間の経過とともに平均値を持ち、データのパターンを取得してしきい値の値を設定したいと思っています。私はループでそれを行うので、例えば、data(1,1,:,1)のように、時間の経過とともにその点の平均値が得られます。

私はmean(data(X,Y,:,V))mean(squeeze(data(X,Y,:,V)))を試しましたが、「下付き添字のインデックスは正の整数または論理でなければなりません」というエラーが表示されています。

私はどこでも検索しますが、平均値の例は2Dと1Dのみです。私は、時間の経過とともにデータの平均値/最大値を取得したい場合、データはdata(X,Y,:,V)になり、現在は3Dデータになっていると思います。

これを行う方法に関するヘルプや考え方はありますか?

+0

を提供答えはそうするのに十分である場合あなたの問題を抱えていますが、その隣にあるチェックマークをクリックすることで、最も適切なものを「受け入れられた回答」とすることができますか?これはまた、この質問が解決されたことを他の人に見てもらうのに役立ちます。 –

答えて

1

問題を分析するには、「添え字インデックスは正の整数または論理でなければなりません」というエラーメッセージから開始します。それが何を意味するのか理解していますか?そうでない場合は、それが意味するものがわからない言葉を含んでいますか?ドキュメントでそれらについて読むことができますか?全体のエラーメッセージをGoogleに送ることはできますか?

これは、MATLABが384×276×20×5配列の要素にどのようにアクセスするのかを理解する必要があるためです。あなたの問題は手段や最大値を取ることとは関係がないので、それらの用語を検索することは役に立たなかった。 384など:あなたが

data(X,Y,T,V) 

次いでX、Y、T、Vは整数(または整数のベクトル)である必要が入力すると

、すなわち、Xの範囲は1でなければなりません。たとえば、

mean(data(1,1,:,1)) 

は、最初のX、Y、V点の時間平均を与えます。

前記、あなたはループを使用すると言ったが...何をすべきか

mean(data,3) 

max(data,[],3) 

を見て...私は理解している場合、これは完全にあなたのループを交換する必要がありますあなたの問題は正しく。

+0

ありがとうございます。ここで何を意味するのかは間違いありません。私が持っているデータはすべて正の値なので、なぜそのエラーがどういうものなのかは分かりません。 はい、データの一時的な値が必要です。私はicrementalループ1:X、1:Y、1:T、1:Vに入れて、結果を行列値に代入するので、私はgnoviceと@Jacobコードで再度algotihmを実行しようとするとpreallocatingを与えると、現在正常に動作しています。ありがとう! – mizzue

+0

このエラーメッセージが表示された場合は、整数を供給していないことを意味します。 X、Y、Vが1.2などの値を持つことができますか? –

3

MEAN関数の2番目のパラメータとして渡すことによって、平均を取るべき次元を指定することができます。次に、3-Dマトリックスを取得するSQUEEZE関数を使用してシングルトン次元を除去することができる:

同じ手順では、空のパラメータを追加する必要がありますが、 MAX関数を使用して最大値を見つけるために従うことができる
meanData = squeeze(mean(data,3)); 

[]あなたは上で動作するディメンションを指定する前に:

maxData = squeeze(max(data,[],3)); 
+0

ありがとうございます@gnovice。私はちょうど私の問題を認識しています..私はそれをpreallocatingを与えることによって解決し、マトリックス関数になるように平均結果を定義します.. – mizzue

1

mean(data,3)max(data,[],3)

関連する問題