5

次のように、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])
4

5 に答える 5

9

マトリックスが実際に探しているものである場合は、numpy パッケージを検討してください。

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

これにより、ゼロの 3x3x3 配列が得られます。

numpy.zeros((3,3,3)) 

また、科学計算用に構築されたモジュールの便利な機能も利用できます。

于 2010-01-31T20:06:55.407 に答える
1

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
于 2010-01-31T20:06:51.693 に答える
0

または、ここで定義されているネスト関数を itertools モジュールの repeat(0) と組み合わせて使用​​します。

nest(itertools.repeat(0),[3,3,3])
于 2010-02-23T20:11:01.823 に答える
-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
于 2010-01-31T20:01:31.550 に答える