2016-06-12 19 views
0

私はサイズ(N_square)=(64,32,87,1460)の4Dベクトルを持っています そして全体のN_squareを0より小さい値でフィルタリングする必要があります。しかし、次に圧力値を取る必要があります。 )を計算し、それらのヒストグラムを作成する。私はすでにN^2の値をどのようにフィルターしたいのかを考え出しましたが、今度は正しい値で3次元をつかみ、圧力値だけで新しい行列を作成しようとしています。ここにN^2をフィルタリングするコードがあります。MATLAB:4D行列の1次元から配列/ベクトルを作成する。

N_square(N_square > 0) = 0); 
N_square = abs(N_square); 

だけでなく、この部分での問題は、私は私が望むすべての値のベクトル、その後、ゼロのがらくたトンで終わるということです。

ご意見やご提案はありますか?私は本当にこれをすぐにやる必要があります。

答えて

0

これで問題は解決しますか?

X = ones(2,3,4,5); 

X(:,:,2,:) = -1; 
X(:,:,4,:) = -1; 
X(1,1,3,1) = -1; 
X(1,1,1,1) = -1; 

[I1,I2,I3,I4]=ind2sub(size(X), find(X<0)); 

hist(I3) 

MATLAB行列には、添え字とlinear indicesという2種類のインデックスがあります。添え字インデックスは、X(i1,i2,i3,i4)のように使用されていますが、線形インデックスであるX(k)と書くこともできます。 find(X<0)を呼び出すと、Xのすべてのエントリの線形インデックスがゼロより小さくなります。 ind2sub()は、線形を添え字インデックスに変換します。 hist(I3)は、3番目のインデックスの分布をプロットします。

+0

コードで何をしているのか説明してください。私は上手く理解できていない気がします。 –

+0

答えに説明を追加しました。 – janismac

+0

ほんとうにありがとう!ありがとう!私はmatlabについて知りませんでした!あなたは私の新しい好きな人です。あなたがルイビルケンタッキー州にいるなら、あなたはこの町が提供しなければならない最も素晴らしい食事を手に入れるでしょう。 –

関連する問題