2010-01-31 98 views
6

我知道你可以在Python輕鬆地創建嵌套的列表是這樣的:如何在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]) 

回答

9

萬一一個矩陣實際上是你正在尋找的,考慮numpy包。

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

這會給你零的3x3x3的數組:

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

也從科學計算構建模塊的便利功能中獲益。

+0

這不起作用。它應該是numpy.zeros((3,3,3)) – 2010-01-31 20:13:18

+0

@ Cytokine更正 – 2010-01-31 20:19:02

+0

哈,我發誓當我輸入它時,元組在那裏......謝謝Jader! – 2010-01-31 20:30:26

-3

就窩乘法語法:

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

這是因此簡單的表達使用​​

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

請允許我編輯 – 2010-01-31 20:17:38

+0

@Jader迪亞斯:阿門 – Dario 2010-01-31 20:33:27

+0

現在使用的地圖! – 2010-01-31 20:39:44

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 
1

列表解析只是用於增加表達式對列表初始化的語法糖;在你的情況下,我根本不會使用它們,並進行一個簡單的嵌套循環。

完全不同的水平:你認爲NumPy的n-dimensional array可能是一個更好的方法?
儘管您可以使用列表來實現多維矩陣,但我認爲它們並不是實現該目標的最佳工具。

0

或者使用定義here巢功能,從itertools模塊裏重複(0)合併:

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