【问题标题】:Numpy: add row and columnNumpy:添加行和列
【发布时间】:2015-03-31 00:22:03
【问题描述】:

如何将一行和一列添加到 numpy 数组。该数组的形状为 (480,639,3),我想要的形状为 (481,640,3)。新的行和列应该用零填充,如下所示:

[43,42,40],         ...        [64,63,61], [0,0,0]
   ...              ...            ...     [0,0,0]
[29,29,29],         ...        [38,37,35], [0,0,0]
[0,0,0], [0,0,0]    ...                    [0,0,0]

要添加一个新列,我这样做:

b = numpy.zeros((480,640,3), dtype = int)
b[:,:-1] = old_arry

但是我怎样才能添加一行?我应该使用循环还是存在更好的方法来做到这一点?

【问题讨论】:

  • 您在正确的机架上添加了列。对行执行相同的操作,例如b[:-1, :-1, :]

标签: python arrays numpy


【解决方案1】:

您可以使用pad

>>> old = np.random.random_integers(0, 100, size=(480, 640))
>>> np.pad(old, pad_width=((0, 1), (0, 1)), mode='constant')
array([[ 66,  22,  51, ...,  18,  15,   0],
       [ 28,  12,  43, ...,   8,  38,   0],
       [ 55,  43,  89, ...,  67,  58,   0],
       ...,
       [ 17,  25, 100, ...,  12,  52,   0],
       [ 97,  59,  82, ...,  38,  97,   0],
       [  0,   0,   0, ...,   0,   0,   0]])
>>> np.pad(old, pad_width=((0, 1), (0, 1)), mode='constant').shape
(481, 641)
>>>

您也可以将其写为np.pad(old, ((0, 1), (0, 1)), mode='constant'),即没有pad_width 关键字。要为填充区域设置不同的值,请参阅文档中的 constant_values 参数。

【讨论】:

    【解决方案2】:

    您可以使用np.vstack 按行堆叠数组,使用np.hstack 按列堆叠它们。见代码:

    >>> import numpy as np
    >>> x = np.arange(480*639*3).reshape((480,639,3))
    >>> new_row = np.zeros((639,3))
    >>> x = np.vstack((x,new_row[np.newaxis,:,:]))
    >>> x.shape
    (481, 639, 3)
    >>> new_col = np.zeros((481,3))
    >>> x = np.hstack([x, new_col[:,np.newaxis,:]])
    >>> x.shape
    (481, 640, 3)
    

    【讨论】:

      【解决方案3】:

      您可以同时展开两个维度,也可以一次展开一个维度。操作相同 - 创建目标数组,并将旧数组复制到适当的切片。 pad 在后台执行此操作。

      b = numpy.zeros((481,640,3), dtype = int)
      b[:-1,:-1,:] = old_arry
      

      例如:

      In [527]: x=np.ones((2,2,3))
      In [528]: y=np.zeros((3,3,3))
      In [529]: y[:-1,:-1:,:]=x
      In [530]: y
      Out[530]: 
      array([[[ 1.,  1.,  1.],
              [ 1.,  1.,  1.],
              [ 0.,  0.,  0.]],
      
             [[ 1.,  1.,  1.],
              [ 1.,  1.,  1.],
              [ 0.,  0.,  0.]],
      
             [[ 0.,  0.,  0.],
              [ 0.,  0.,  0.],
              [ 0.,  0.,  0.]]])
      

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 2010-12-26
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        相关资源
        最近更新 更多