2013-03-13 41 views
5

Tôi cần tạo một dãy số không đối xứng.Tạo Zeros đa chiều Python

Đối với hai (D = 2) hoặc ba (D = 3) kích thước, điều này rất dễ dàng và tôi muốn sử dụng:

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

hoặc

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

Làm thế nào để tôi cho cao hơn D , làm cho mảng chiều dài n?

Trả lời

10

Bạn có thể nhân một tuple (n,) theo số thứ nguyên bạn muốn. ví dụ .:

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

CHỈNH SỬA: trong khi ở trên không sai, chỉ là quá mức. @ mgilson của câu trả lời là tốt hơn.

+0

Ngày nghĩ thứ hai, tôi không thực sự chắc chắn cách này giúp bạn bất cứ điều gì mà 'np.zeros' không đã hỗ trợ. Làm thế nào là tốt hơn so với 'np.zeros (sh)'? – mgilson

+0

@mgilson: bạn nói đúng. Không cần thêm dấu ngoặc nữa: 'np.zeros (sh)' hoạt động. –

+0

Đúng vậy, đó là ý của tôi :) – mgilson

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

Điều này thực sự không khác gì câu trả lời của tôi ngoài việc bạn đang sử dụng danh sách chứ không phải là một bộ dữ liệu ... – mgilson