2010-12-16 36 views
2

如何將0添加到多維數組每行的開始和結尾?這是我試圖應用於每一行的功能。Python多維數組 - 在每行的開始和結尾添加附加值

def zero(ltr): 
    for x in range (1,int((N+1)/2)): 
     ltr = append(([0]), ltr) 
     ltr = append(ltr,([0])) 
    return ltr 

我已經嘗試使用這兩種

for row in a: 
    zero(row) 

apply_along_axis(zero,1,a) 無論這些命令中的一個我想要做什麼。

回答

4

無法將條目添加到二維數組的單個行中。所有行必須始終具有相同的長度。但是您可以一次將條目添加到所有行。

如果a是二維NumPy的數組,你可以使用numpy.hstack添加零至左,右:

a = numpy.array([[ 0., 1., 2., 3.], 
       [ 4., 5., 6., 7.], 
       [ 8., 9., 10., 11.]]) 
numpy.hstack((numpy.zeros((a.shape[0], 2)), a, numpy.zeros((a.shape[0], 1)))) 
# array([[ 0., 0., 0., 1., 2., 3., 0.], 
#  [ 0., 0., 4., 5., 6., 7., 0.], 
#  [ 0., 0., 8., 9., 10., 11., 0.]]) 

例如起見,我添加2零到左側和1零在右邊。

0

編輯:我看你已經在使用numpy。我會爲了教育而離開這個,但是您應該按Sven's answer的順序使用hstack

>>> a = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] 
>>> for row in a: 
...  row.insert(0, 0) 
...  row.append(0) 
... 
>>> a 
[[0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0]] 

或者如果你喜歡:

>>> import operator 
>>> a = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] 
>>> map(operator.methodcaller("insert", 0, 0), a) 
[None, None, None] 
>>> map(operator.methodcaller("append", 0), a) 
[None, None, None] 
>>> a 
[[0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0]]