2010-01-31 4 views
6

나는이 같은 파이썬에서 쉽게 중첩 된 목록을 만들 수 있습니다 알고파이썬에서 중첩 목록을 만드는 방법은 무엇입니까?

[[1,2],[3,4]] 

그러나 어떻게이 제로의 3x3x3 행렬을 만들?

[[[0]*3]*3]*3 

[[[0] * 3 for i in range(0, 3)] for j in range (0,3)] 

또는

바로 보이지 않습니다. 메서드 목록에 차원 목록을 전달하면됩니다. 예 :

CreateArray([3,3,3]) 

답변

9

행렬은 실제로 당신이 찾고있는 것입니다, numpy 패키지를 고려하십시오.

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

당신은 또한 과학 컴퓨팅을 위해 만들어진 모듈의 편의 기능을 활용할 :

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

이것은 당신에게 제로의 3x3x3 배열을 제공 할 것입니다.

+0

이것은 작동하지 않습니다. numpy.zeros ((3, 3, 3)) –

+0

@Cytokine 수정 –

+0

입력 할 때 터플이 있었음을 알립니다.감사합니다 Jader! –

-3

그냥 둥지 곱셈 구문 :

[[[0] * 3] * 3] * 3 

그것은 folds

def zeros(dimensions): 
    return reduce(lambda x, d: [x] * d, [0] + dimensions) 

아니면 참조 복제를 방지하려는 경우 사용하여이 작업을 표현하는 것이 간단합니다, 그래서 변경 한 항목은 복사물을 사용해야하는 다른 항목에 영향을주지 않습니다.

import copy 
def zeros(dimensions): 
    item = 0 
    for dimension in dimensions: 
     item = map(copy.copy, [item] * dimension) 
    return item 
+1

내 편집 –

+0

@Jader 디아스을 허용하십시오 : 아멘 – Dario

+0

지금지도를 사용! –

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'> 

를 해결하지만 매트릭스로 파이썬 기본 목록을 사용하려면 다음 도우미 메서드 편리하게 할 수 있습니다 경우

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 
1

목록 내장은 목록 초기화에 표현력을 추가하기위한 문법적 설탕입니다. 귀하의 경우에는 전혀 사용하지 않고 간단한 중첩 루프를 사용합니다.

완전히 다른 수준 : NumPy의 n-dimensional array은 더 나은 접근 방법이라고 생각하십니까?
목록을 사용하여 다차원 행렬을 구현할 수 있지만 그 목표를위한 최선의 도구는 아닙니다.

0

또는 itertools 모듈에서 반복 (0)와 결합 here을 정의 둥지 기능을 사용

nest(itertools.repeat(0),[3,3,3])