【问题标题】:Copy numpy array into part of another array将numpy数组复制到另一个数组的一部分
【发布时间】:2017-04-03 01:57:53
【问题描述】:

如果我运行以下命令:

import numpy as np
a = np.arange(9)
a = a.reshape((3,3))

我会得到这个:

a = [[0 1 2]
     [3 4 5]
     [6 7 8]]

如果我像这样创建一个更大的数组:

b = np.zeros((5,5))
b = [[ 0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.]]

如何有效地将a 复制到b 以获得这样的数组?

# border of 0 surrounding a to be filled in with other data later
b = [[ 0.  0.  0.  0.  0.]
     [ 0.  0.  1.  2.  0.]
     [ 0.  3.  4.  5.  0.]
     [ 0.  6.  7.  8.  0.]
     [ 0.  0.  0.  0.  0.]]

我正在寻找 numpy 中内置的函数(如果存在)。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您可以指定b[1:4, 1:4] 来表示零件:

    >>> import numpy as np
    >>> a = np.arange(9)
    >>> a = a.reshape((3, 3))
    >>> b = np.zeros((5, 5))
    >>> b[1:4, 1:4] = a
    >>> b
    array([[ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  1.,  2.,  0.],
           [ 0.,  3.,  4.,  5.,  0.],
           [ 0.,  6.,  7.,  8.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])
    
    >>> b[1:4,1:4] = a + 1  # If you really meant `[1, 2, ..., 9]`
    >>> b
    array([[ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  1.,  2.,  3.,  0.],
           [ 0.,  4.,  5.,  6.,  0.],
           [ 0.,  7.,  8.,  9.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])
    

    【讨论】:

    • [1..9] 是我的一个错误,但这完美地解决了我的问题。
    【解决方案2】:

    作为替代方案,如果您想要一个不同于零的填充值,您可以使用此选项

    >>> a = np.arange(9.).reshape(3,3)
    >>> np.pad(a, 1, 'constant', constant_values=0)
    array([[ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  1.,  2.,  0.],
           [ 0.,  3.,  4.,  5.,  0.],
           [ 0.,  6.,  7.,  8.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])
    >>> np.pad(a, 1, 'constant', constant_values=5)
    array([[ 5.,  5.,  5.,  5.,  5.],
           [ 5.,  0.,  1.,  2.,  5.],
           [ 5.,  3.,  4.,  5.,  5.],
           [ 5.,  6.,  7.,  8.,  5.],
           [ 5.,  5.,  5.,  5.,  5.]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-17
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多