Python で 2 次元配列を開始する方法
このチュートリアルガイドでは、Python で 2 次元配列を開始するさまざまな方法を紹介します。次の例では、3x5
の 2 次元配列を作成します。
2D 配列を開始するリスト内包表記
>>> column, row = 3, 5
>>> array2D = [[0 for _ in range(row)] for _ in range(column)]
>>> array2D
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
このネストされたリスト内包メソッドは、初期値が 0
の 2 次元配列を作成します。もちろん、アプリケーションで割り当てる必要がある任意の値に初期値を変更できます。
2D 配列を開始するネストされた range
メソッド
2 次元配列の初期値を気にしない場合、値 0
を削除することさえできます。
Python 2.x で
>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
Python 3.x で
>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[range(0, 5), range(0, 5), range(0, 5)]
range
は Python 3.x の整数のシーケンスを含むオブジェクトを返しますが、Python 2.x のような整数のリストは返さないため、Python 3.x で 2 次元配列を開始するために単に range(x)
を使用することはできませんでした。
Python 3.x の range
は Python 2.x の xrange
により類似しています。Python 3.x の range
オブジェクトは不変であるため、要素にアイテムを割り当てません。
アイテムの割り当てが必要な場合は、range
を list
オブジェクトに変換する必要があります。
>>> A = [list(range(row)) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
2D 配列を開始する [0] * N
メソッド
2 次元配列を開始する Python の方法の 1つは、
>>> column, row = 3, 5
>>> A = [[0]*row for _ in range(column)]
>>> A
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
リストの乗算を使用する場合、同じオブジェクトを複数回参照するシーケンスを作成するだけなので注意が必要ですが、データオブジェクト 0
は不変であるため、ここでは [0]*n
を使用できます。同じ不変オブジェクトへの参照であっても問題に遭遇することはありません。
2D 配列を開始する NumPy
メソッド
ネイティブ Python 配列に加えて、NumPy
は 2 次元配列、またはより正確には行列を作成するための最良のオプションである必要があります。
numpy.zeros
でゼロで満たされた行列を作成できます。
>>> import numpy as np
>>> column, row = 3, 5
>>> np.zeros(column, row)
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
または、numpy.ones
で ones
で満たされたマトリックスを開始します
>>> import numpy as np
>>> column, row = 3, 5
>>> np.ones((column, row))
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
numpy.empty
でエントリを初期化せずに新しい配列を作成することもできます
>>> import numpy as np
>>> column, row = 3, 5
>>> np.empty((5,5))
array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306,
1.33511562e-306, 1.89146896e-307],
[7.56571288e-307, 3.11525958e-307, 1.24610723e-306,
1.37962320e-306, 1.29060871e-306],
[2.22518251e-306, 1.33511969e-306, 1.78022342e-306,
1.05700345e-307, 1.11261027e-306],
[1.11261502e-306, 1.42410839e-306, 7.56597770e-307,
6.23059726e-307, 1.42419530e-306],
[7.56599128e-307, 1.78022206e-306, 8.34451503e-308,
2.22507386e-306, 7.20705877e+159]])