【问题标题】:How to copy array in Python如何在 Python 中复制数组
【发布时间】:2018-03-28 19:36:14
【问题描述】:

这似乎是一个简单的问题。但对我来说这很棘手......对不起。 我有一个形状为 (2800, 256, 256, 3) 的大 ndarray,其中填充了零。 我有一个形状为 (700, 256, 256, 3) 的 ndarray 和数据。所以我想将数据复制到第一个数组。这样,第一个数组中的前 700 行将包含来自第二个数组的数据。那怎么办?

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

你用切片索引将一个数组复制到另一个数组的切片中:

In [41]: arr = np.zeros((4,3,2), int)
In [42]: x = np.arange(12).reshape(2,3,2)
In [43]: arr[:2,:,:] = x
In [44]: arr
Out[44]: 
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[ 6,  7],
        [ 8,  9],
        [10, 11]],

       [[ 0,  0],
        [ 0,  0],
        [ 0,  0]],

       [[ 0,  0],
        [ 0,  0],
        [ 0,  0]]])

arr[:2] = x 也同样有效,但有时它可以帮助我们人类查看正在复制的维度。

它不必是一个切片,只要= 紧随其后。

In [46]: arr[[0,2],:,:] = x
In [47]: arr
Out[47]: 
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[ 0,  0],
        [ 0,  0],
        [ 0,  0]],

       [[ 6,  7],
        [ 8,  9],
        [10, 11]],

       [[ 0,  0],
        [ 0,  0],
        [ 0,  0]]])

【讨论】:

    【解决方案2】:

    我相信你可以做到:

    arr2 = arr1[:700,:,:,:].copy()
    

    这会将数组沿第一个轴切分到索引 700(它为您提供前 700 个条目),并复制这些行的所有其他轴。

    【讨论】:

    • 复制而不是视图需要arr2 = arr1[:700,:,:,:].copy()
    • 我认为应该反过来。
    • 不!我不想要第一个数组中的维度。在您做出决定后,它将具有形状(700、256、256、3)。但我想要 (2800, 256, 256, 3) 只有前 700 行包含数据。 @LizardCode
    • 那你只想要arr[:700,...] = arr2 不是吗?
    • @xnx 它不工作。第一个数组中仍有零。
    猜你喜欢
    • 2014-05-23
    • 2020-07-15
    • 2020-03-09
    • 2016-02-09
    • 2011-12-12
    • 1970-01-01
    • 2017-08-18
    • 2020-11-16
    • 2011-09-25
    相关资源
    最近更新 更多