Python で 2 次元配列を開始する方法

  1. 2D 配列を開始するリスト内包法
  2. 2D 配列を開始するネストされた range メソッド
  3. 2D 配列を開始する numpy メソッド

このチュートリアルガイドでは、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 オブジェクトは不変であるため、要素にアイテムを割り当てません。

アイテムの割り当てが必要な場合は、rangelist オブジェクトに変換する必要があります。

>>> 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.onesones で満たされたマトリックスを開始します

>>> 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]])
ノート

最初に空の配列を作成し、後で要素値を割り当てる場合は、より良い解決策です。ただし、ランダムな値は配列内にあるため、対応するインデックスの値が割り当てられる前にインデックスを作成して配列にアクセスすると危険になる可能性があります。

関連記事 - Python Array

  • Python で 1 次元配列内のアイテムの出現をカウントする方法
  • comments powered by Disqus