2017-07-30 6 views
2

私はPython 3を使用しており、既知の固定サイズの2D整数配列を作成しようとしています。これどうやってするの?Python 3でサイズn * mの2D配列を効率的に初期化できますか?

私が念頭に置いている配列は、Pythonで提供されたarray.arrayですが、NumPyのようなライブラリを使うのは嫌です。

これはリストを使って行うことができますが、スペース効率が高いので配列を使用したいと思います。今、私はこのようにリストを初期化していますが、私は、配列に置き換えることをしたい:どのようにすることができる。例えば

my_list = [[ 0 for _ in range(height) ] for _ in range(.width)]

、Cで、私は

int my_array[ width ][ height ];

を記述します私は、Python

でこれを行う
+0

あなたはnumpyのを使用することに開いていますか? –

+0

なので、**正確に**配列の意味は? 'numpy.ndarray'?または 'array.array'? –

+0

最小限の例を投稿してください。実際のデータ型は何ですか? https://docs.python.org/3/library/array.html? – wwii

答えて

2

あなたはnumpyの使用することができます。

import numpy as np 
my_array = np.zeros([height, width]) 
たとえば

>>> np.zeros([3, 5]) 
array([[ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.]]) 

注あなたは、具体的整数が必要な場合、あなたはdtype引数

>>> np.zeros([3, 5], dtype=int) 
array([[0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0]]) 
+0

これらのスペースは '' 'array.array'''sのように効率的ですか?私が扱う整数配列は〜1000x1000の大きさであると予想されます。 編集:Numpyのドキュメントを読みましたが、タイプint-8を使用する配列を指定できるようですが、現在要素あたりのオーバーヘッドを調べようとしています。 – tpepin96

+1

@ tpepin96はい、そうです。あなたが話している次元を考えれば、リストのリストさえ現代のハードウェア上の問題ではないでしょう。 –

+0

@ tpepin96これらは基本配列なので、各要素は 'dtype'が意味するどんなサイズでもあります... –

0

を使用する必要があることをあなたが投稿したコードのnumpyのと同等です:

import numpy as np 
my_array = np.empty([height, width]) 

emptyは初期化されていない領域を予約しているため、zerosよりわずかに高速です。zerosはすべてが最初に0に設定されていることを確認する必要があります。

C/C++の場合と同様に、最初は「ガベージを含む」ため、値を書き込む必要があります。

ドキュメント:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.empty.html

https://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html

関連する問題