2016-11-30 43 views
-1

matlabで行列の行数を半分に減らす最良の方法は何ですか?matlabで行列の行数を半分に減らすにはどうしたらいいですか?

次のコマンドは何をしていますか?

mymatrix = mymatrix(1:2:end,:); 

もっと良い方法がありますか?

+0

これはおそらく最も簡単な方法です。はい。 – Suever

+0

@Suever、そのコマンドは実際に何をしていますか? – anonymous

+0

与えられたコマンドは、最初の行から2行おきに保存されています。だからそれは間に行を投げ捨てている。 「最良の」方法は、破棄された情報が持つ価値または役割によって異なります。これは縮小するイメージですか?その場合は、行を破棄する前にピクセル値を補間することをお勧めします。行数を減らす他にも多くの方法があります(たとえば、上半分を取るなど)。「ベスト」は、あなたが達成したいことが文脈でわかるまで、あまり定義されていません。 – jez

答えて

1

短い答えこれは、行列のすべての2番目の行を最初のもの(すべての奇数行)から開始し、おそらく最も簡単な方法であるとみなしています。 @Sardar_Usama

長いバージョン

end

からのコメントに基づいて、追加された清澄化は、所与の次元の配列の終わりを意味するMATLAB内部コマンドです。 size(var,dim)にほぼ相当します。

実際にはmymatrix(1:2:end,:)mymatrix(1:2:size(mymatrix,1),:)に書き直すことができます。実際に1:2:size(mymatrix,1)を見ると、これは選択している行です。 1, 3, 5, etc。実際にそこに必要な行を指定することができますが、いくつかの例があります。

1:floor(end/2); % first 'half' 
floor(end/2)+1:end; % second 'half' 
1:3:end; % every third element 
1:2:floor(end/2); % every second element in the first 'half' 

奇数長の問題を避けるためにfloor()が追加されました。その場合、「半分」はちょうど半分ではなく、むしろおよそ半分である。あるいは、奇数長の半分をどのように定義するかによって、ceil()になります。

+0

なぜn行数を数えてから最初のn/2行を選択しないのですか? – anonymous

+0

正解は**毎秒を除くすべての行** –

+0

'end + 1:end;'は後半ではありません。そして、 '1/end/2;'は 'end/2'が整数でないので警告を生成する可能性があります。 –

関連する問題