次のように、Pythonで簡単にネストされたリストを作成できることを私は知っています:
[[1,2],[3,4]]
しかし、ゼロの 3x3x3 行列を作成するにはどうすればよいでしょうか?
[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]
また
[[[0]*3]*3]*3
正しくないようです。ディメンションのリストをメソッドに渡すだけで作成する方法はありませんか? 元:
CreateArray([3,3,3])
次のように、Pythonで簡単にネストされたリストを作成できることを私は知っています:
[[1,2],[3,4]]
しかし、ゼロの 3x3x3 行列を作成するにはどうすればよいでしょうか?
[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]
また
[[[0]*3]*3]*3
正しくないようです。ディメンションのリストをメソッドに渡すだけで作成する方法はありませんか? 元:
CreateArray([3,3,3])
マトリックスが実際に探しているものである場合は、numpy パッケージを検討してください。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros
これにより、ゼロの 3x3x3 配列が得られます。
numpy.zeros((3,3,3))
また、科学計算用に構築されたモジュールの便利な機能も利用できます。
NumPy はこの問題に対処します
http://www.scipy.org/Tentative_NumPy_Tutorial#head-d3f8e5fe9b903f3c3b2a5c0dfceb60d71602cf93
>>> a = array( [2,3,4] )
>>> a
array([2, 3, 4])
>>> type(a)
<type 'numpy.ndarray'>
しかし、Python ネイティブ リストをマトリックスとして使用する場合は、次のヘルパー メソッドが便利です。
import copy
def Create(dimensions, item):
for dimension in dimensions:
item = map(copy.copy, [item] * dimension)
return item
def Get(matrix, position):
for index in position:
matrix = matrix[index]
return matrix
def Set(matrix, position, value):
for index in position[:-1]:
matrix = matrix[index]
matrix[position[-1]] = value
または、ここで定義されているネスト関数を itertools モジュールの repeat(0) と組み合わせて使用します。
nest(itertools.repeat(0),[3,3,3])
乗算構文をネストするだけです。
[[[0] * 3] * 3] * 3
したがって、折り畳みを使用してこの操作を表現するのは簡単です
def zeros(dimensions):
return reduce(lambda x, d: [x] * d, [0] + dimensions)
または、参照の複製を避けたい場合は、1 つの項目を変更しても他の項目に影響を与えないようにするには、代わりにコピーを使用する必要があります。
import copy
def zeros(dimensions):
item = 0
for dimension in dimensions:
item = map(copy.copy, [item] * dimension)
return item