Python多维数组 - 在每行的开头和结尾添加其他值

时间:2010-12-16 00:49:44

标签: python multidimensional-array numpy iteration

如何在多维数组的每一行的开头和结尾添加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) 这些命令中的任何一个都没有达到我想要的效果。

2 个答案:

答案 0 :(得分: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零。

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