2016-05-27 5 views
2

私は10×10の値の配列Aを持っています。これらの値のうち、中央値、Mが必要です。私は簡単に行に沿ってまたは列に沿って中央値を見つけることができます。MATLABの多次元配列(1次元ではない)の中央値

M = median(A,1) %or 
M = median(A,2) 

しかし、M = median(A)も行に沿って中央値を返します。

どのようにすべての値の単一の中央値を見つけることができますか?私は非常に長いベクターに配列を変換することができますが、それは不愉快で非効率なようです。よりシンプルなソリューションはありますか?私は多次元配列に対してもこれを行うことができるようにしたいと考えています。

ありがとうございます!

+2

行列を単一ベクトルに変換することは、MATLABで実行できる**最も高速な**演算の1つです。 MATLABのメモリはカラムメジャー順に並べられていますので、実際に複数のディメンションアクセスインデックスを使用して正しいメモリロケーションを取得することは、単一のインデックスを持つエレメントに多次元でアクセスするための構文上の砂糖です。下のLuisの提案は、行列を長いベクトルに展開して中央値を実行するというものです。それ以上の速度を得ることはできません。 – rayryeng

+1

パーフェクト!私は変換に時間がかかることを過大評価しました。ありがとう! – Takver

+0

Luisの回答を受け入れると、コミュニティはあなたにもう助けが必要ではないことを知らせてください。 – rayryeng

答えて

5

(:)で最初に線形化します。これは、任意の配列を列配列に変換します。そして、中央値の計算:

M = median(A(:)); 

を私は(:)を持つインデックスは任意のメモリの再割り当てを必要とすることはないと思います。それはちょうどcolumn-major順序の配列を読みます。

+1

これ以外の答えはありません。 +1。 – rayryeng