2017-06-12 172 views
2

整形數組我有陣列與蟒蛇

A = array([[ 1., 2., 3., 10., 11., 12.], 
      [ 4., 5., 6., 13., 14., 15.], 
      [ 7., 8., 9., 16., 17., 18.], 
      [ 19., 20., 21., 28., 29., 30.], 
      [ 22., 23., 24., 31., 32., 33.], 
      [ 25., 26., 27., 34., 35., 36.]]) 

我想重塑它以獲得

B = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36] 

我已經試過

>>> B = A.reshape(1,36) 
array([[ 1., 2., 3., 10., 11., 12., 4., 5., 6., 13., 14., 
     15., 7., 8., 9., 16., 17., 18., 19., 20., 21., 28., 
     29., 30., 22., 23., 24., 31., 32., 33., 25., 26., 27., 
     34., 35., 36.]]) 

但是,很明顯,我沒有達到結果。我的實際數據與示例不同,因此我無法對數組A進行排序以獲得B

我想我需要更多的重塑......

+0

您能否提供更多的上下文?嚴格地說,'numpy.sort(A.flatten())'將實現這個結果。但我猜這不是你的真實數據,我們不能依靠排序來獲得你想要的訂單。 –

+0

@PaulH我編輯了這個問題。你的答案適用於這個例子,但我不能使用排序(我有隨機數) – DiegoDZ

+1

我想。仍然需要更多的細節。你試圖做出多大的解決方案?例如:你是否總是要處理被劃分爲象限的正方形陣列(N×N,其中N是偶數)?或者它總是被分成任意數量的3x3塊? –

回答

5

每個分割這兩個軸,使得其餘的是每一個reshape長度2給我們一個4D陣列,然後用np.swapaxes()掉中間的兩個軸

A.reshape(2,3,2,3).swapaxes(1,2).ravel() 

一般地說 - -

m,n = A.shape 
A.reshape(2,m//2,2,n//2).swapaxes(1,2).ravel() 
,最後用 np.ravel()壓扁

樣品運行 -

In [15]: A 
Out[15]: 
array([[ 1., 2., 3., 10., 11., 12.], 
     [ 4., 5., 6., 13., 14., 15.], 
     [ 7., 8., 9., 16., 17., 18.], 
     [ 19., 20., 21., 28., 29., 30.], 
     [ 22., 23., 24., 31., 32., 33.], 
     [ 25., 26., 27., 34., 35., 36.]]) 

In [16]: A.reshape(2,3,2,3).swapaxes(1,2).ravel() 
Out[16]: 
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 
     12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 
     23., 24., 25., 26., 27., 28., 29., 30., 31., 32., 33., 
     34., 35., 36.])