2010-12-16 6 views
2

다차원 배열의 각 행의 시작과 끝 부분에 0을 어떻게 추가합니까? 이것은 각 행에 적용하려고하는 함수입니다.파이썬 다차원 배열 - 각 행의 시작과 끝에 추가 값을 추가하십시오.

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

2 차원 배열의 단일 행에 항목을 추가 할 수 없습니다. 모든 행은 항상 같은 길이 여야합니다. 그러나 모든 행에 항목을 한 번에 추가 할 수 있습니다. a 2 차원 NumPy와 배열 인 경우

, 당신은 왼쪽과 오른쪽에 0을 추가 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.]]) 

, 나는 왼쪽과 1 제로로 2 0을 추가 오른쪽으로.

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