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

2 投票
2 回答
7227 浏览
提问于 2025-04-16 08:36

我想知道怎么在一个多维数组的每一行的开头和结尾加上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

编辑:我看到你已经在使用 numpy 了。为了帮助大家学习,我还是把这个留着,但你应该使用 hstack,就像Sven的回答里提到的那样。

>>> 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]]
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个零。

撰写回答