2017-09-18 5 views
3

サイズが1024x1024x1x1x100の5Dアレイがあるとします。 1024x1024x100の新しいアレイを作成するにはどうすればよいですか?長さ1のジュリアアレイの寸法をドロップ

次作品あなたが前もって保存しておきたいどの次元わかっている場合:

arr = arr[:, :, 1, 1, :] 

しかし、私は私だけ維持したい前もってのどのようなサイズとされている寸法を知らないをbooleanマスクが与えられた次元。このような何か...

arr2 = arr[(size(arr) .> 1)] 
+1

'と一般的には、' squeeze'、 'reshape'、と' size'((サイズの(a)== 1)...)を見つける(、。) 'スクイズをお試しください操作を行う必要があります。 –

+0

なぜこれをやりたいのですか? –

+1

@DanGetz 'squeeze'はこれで本当にうまく動作します。答えとして書くことができますか?それをマークして解決しますか?ありがとう! – tlnagy

答えて

5

squeeze機能は、マニュアルから長さ1の次元を除去する目的のために特別に定義されました:

Base.squeeze - 機能。

squeeze(A, dims)

薄暗くなりの配列Aの要素から薄暗くなりによって指定 範囲1:ndims(A)内で一意と でなければならない寸法を削除します。 size(A,i)は、すべてiの場合は1に等しく、dimsになる必要があります。

サイズ1のすべてのディメンションを圧縮するには(事前に不明な場合)、それらを見つけてタプルにする必要があります。これは((size(arr).==1)...)によって実行されます。だから、結果は次のとおりです。

squeeze(a,(find(size(a).==1)...)) 
+0

'squeeze'が新しい配列を割り当てているので、' ssheze'はこのケースのために作られているようですので、実際は私のケースで 'reshape'を使ってしまうかもしれません。 – tlnagy

+0

@tlnagy 'squeeze'は' reshape'を使って実装されているので、それを使うことができ、新しい配列を割り当てません(要素を変更してテストするだけです) –

関連する問題