2013-03-13 52 views
5

我需要做一個零維的多維數組。創建多維零Python

對於兩(d = 2)或三個(d = 3)的尺寸,這是很簡單的我會使用:

a = numpy.zeros(shape=(n,n)) 

a = numpy.zeros(shape=(n,n,n)) 

如何對我爲更高d ,使長度爲n的數組?

回答

10

您可以將元組(n,)乘以所需的維數。例如: -

>>> import numpy as np 
>>> N=2 
>>> np.zeros((N,)*1) 
array([ 0., 0.]) 
>>> np.zeros((N,)*2) 
array([[ 0., 0.], 
     [ 0., 0.]]) 
>>> np.zeros((N,)*3) 
array([[[ 0., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]]) 
2
>>> sh = (10, 10, 10, 10) 
>>> z1 = zeros(10000).reshape(*sh) 
>>> z1.shape 
(10, 10, 10, 10) 

編輯:雖然上面沒有錯,但它只是過度。 @ mgilson的答案更好。

+0

關於第二個想法,我真的不知道如何讓你任何'np.zeros'不已經支持。這比'np.zeros(sh)'更好嗎? – mgilson 2013-03-13 18:15:06

+0

@mgilson:你是對的。不需要額外的括號,'np.zeros(sh)'工作。 – 2013-03-13 18:16:41

+0

對,這就是我的意思:) – mgilson 2013-03-13 18:18:00

2
In [4]: import numpy 

In [5]: n = 2 

In [6]: d = 4 

In [7]: a = numpy.zeros(shape=[n]*d) 

In [8]: a 
Out[8]: 
array([[[[ 0., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]], 


     [[[ 0., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]]]) 
+0

這真的和我的答案沒有什麼不同,除了你使用的是列表而不是元組...... – mgilson 2013-03-13 18:16:00