web-dev-qa-db-ja.com

Pythonの2D配列

Pythonで2D配列を作成する最良の方法は何ですか?

私が欲しいのは、このような値を保存することです:

X , Y , Z

X[2],Y[2],Z[2]X[n],Y[n],Z[n]などのデータにアクセスするために、nは可変です。最初はnの大きさがわからないので、最後に値を追加したいと思います。

24
spring liu
>>> a = []

>>> for i in xrange(3):
...     a.append([])
...     for j in xrange(3):
...             a[i].append(i+j)
...
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>>
22
Perica Zivkovic

何をしているのかにもよりますが、実際には2次元配列がない場合があります。

80%の時間に、「行のようなオブジェクト」の単純なリストがあります。これは適切なシーケンスである可能性があります。

myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ]

myArray[0][1] == 3.14159
myArray[1][1] == 2.71828

多くの場合、それらはクラスや辞書、セットのインスタンス、または以前の言語にはなかったより興味深いものです。

myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ]

ペアでキー設定された辞書を持っている時間の20%

myArray = { (2009,'aug'):(some,Tuple,of,values), (2009,'sep'):(some,other,Tuple) }

まれに、実際にマトリックスが必要になります。

Pythonには多数のコレクションクラスがあります。オッズは、マトリックスよりも面白いものがあるというのは良いことです。

10
S.Lott

In Pythonこの目的のために、通常は lists を使用します。リストは任意にネストできるため、2D配列を作成できます。すべてのサブリストが同じである必要はありませんサイズを変更して、他の問題を解決します。リンク先の例をご覧ください。

9
Stephan202

配列で深刻な作業を行う場合は、 numpy library を使用する必要があります。これにより、例えばベクトルの加算と行列の乗算を行うことができ、大きな配列の場合はPythonリストよりもはるかに高速です。

ただし、numpyではサイズが事前に定義されている必要があります。もちろん、次のようにnumpy配列をリストに保存することもできます。

import numpy as np
vec_list = [np.zeros((3,)) for _ in range(10)]
vec_list.append(np.array([1,2,3]))
vec_sum = vec_list[0] + vec_list[1]  # possible because we use numpy
print vec_list[10][2]  # prints 3

しかし、numpy配列はかなり小さいため、Tupleを使用する場合と比べてオーバーヘッドがあると思います。それはすべてあなたの優先順位に依存します。

こちらもご覧ください question 、これはかなり似ています(可変サイズを除く)。

7
nikow

次のような辞書を使用することをお勧めします。

arr = {}

arr[1] = (1, 2, 4)
arr[18] = (3, 4, 5)

print(arr[1])
>>> (1, 2, 4)

辞書にエントリが定義されているかどうかわからない場合は、「arr [x]」を呼び出すときに検証メカニズムが必要になります。試してみてください。

5
Roee Adler

メモリフットプリントが心配な場合、Python標準ライブラリには array module が含まれます;これらの配列には同じタイプの要素が含まれます。

3
Eric O Lebigot

次のコードを考慮してください。

from numpy import zeros
scores = zeros((len(chain1),len(chain2)), float)
0
C-Zeous
x=list()
def enter(n):
    y=list()
    for i in  range(0,n):
        y.append(int(input("Enter ")))
    return y
for i in range(0,2):
    x.insert(i,enter(2))
print (x)

ここでは、1-D配列を作成する関数を作成し、配列メンバーとして別の配列に挿入しました。配列内の複数の1次元配列。nとiの値が変わると多次元配列が作成されます。

0
Shah_jahan