2017-11-05 10 views
1

私はこの配列を作成しています:あなたはすでに補助リストを使用して気にしない場合2次元配列を簡単に作成するにはどうすればよいですか?

>>> np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]]) 

array([[ 0, 1, 2, 3, 4, 5], 
     [10, 11, 12, 13, 14, 15], 
     [20, 21, 22, 23, 24, 25], 
     [30, 31, 32, 33, 34, 35], 
     [40, 41, 42, 43, 44, 45], 
     [50, 51, 52, 53, 54, 55]]) 

を私はすべての要素を入力しています

答えて

3

フム、あなたは常にリスト内包表記を使用することができます。

>>> np.arange(0, 51, 10).reshape(-1, 1) + np.arange(6) 
array([[ 0, 1, 2, 3, 4, 5], 
     [10, 11, 12, 13, 14, 15], 
     [20, 21, 22, 23, 24, 25], 
     [30, 31, 32, 33, 34, 35], 
     [40, 41, 42, 43, 44, 45], 
     [50, 51, 52, 53, 54, 55]]) 
>>> np.array([list(range(i, i + 6)) for i in range(0, 55, 10)]) 
array([[ 0, 1, 2, 3, 4, 5], 
     [10, 11, 12, 13, 14, 15], 
     [20, 21, 22, 23, 24, 25], 
     [30, 31, 32, 33, 34, 35], 
     [40, 41, 42, 43, 44, 45], 
     [50, 51, 52, 53, 54, 55]]) 

そしてここでは、放送を使ってnumpy方法です

このアプローチは、特に大きな例では、高速で、補助記憶装置の必要が大幅に少なくなります。

+0

興味深いトリックにも。 –

4

これにはmgridクラスインスタンスを使用できます。

import numpy as np 

y, x = np.mgrid[:60:10, :6] 
a = y + x 
print(a) 

出力

[[ 0 1 2 3 4 5] 
[10 11 12 13 14 15] 
[20 21 22 23 24 25] 
[30 31 32 33 34 35] 
[40 41 42 43 44 45] 
[50 51 52 53 54 55]] 

マイナーな変動は、2つの配列の付加を行うためにnumpyのsum関数を使用することである。

a = np.sum(np.mgrid[:60:10, :6], axis=0) 

しかし、user2357112としてコメントに言及すると、それだけで効率的です関数を呼び出すのではなく、+演算子で加算してください。

yxでRAMを消費する列と行の配列を作成するには、ogridを使用することもできます。そして、それも速いです。

import numpy as np 
y, x = np.ogrid[:60:10, :6] 
a = y + x 
print(y, x, a, sep='\n\n') 

出力

[10] 
[20] 
[30] 
[40] 
[50]] 

[[0 1 2 3 4 5]] 

[[ 0 1 2 3 4 5] 
[10 11 12 13 14 15] 
[20 21 22 23 24 25] 
[30 31 32 33 34 35] 
[40 41 42 43 44 45] 
[50 51 52 53 54 55]] 
+0

nice!これは便利です。 –

+0

2つの配列を追加するのに 'sum'を使う点はありません。 (また、 'mgrid'の代わりに' ogrid'を使用してより小さい一時ファイルを作成することもできます。これがもっと速いかどうかはわかりません) – user2357112

+0

@ juanpa.arrivillagaありがとう! 'mgrid'はとても便利です。しかし、それは配列のように見えるクラスインスタンスであるという点では少し変ですが、インデックスを作成するときに値を作成します。 –

0

別のオプション

np.array([np.arange(i, i+6) for i in range(56)[::10]]) 

出力:

array([[ 0, 1, 2, 3, 4, 5], 
     [10, 11, 12, 13, 14, 15], 
     [20, 21, 22, 23, 24, 25], 
     [30, 31, 32, 33, 34, 35], 
     [40, 41, 42, 43, 44, 45], 
     [50, 51, 52, 53, 54, 55]]) 
関連する問題