Numpy 沿特定维度展开数组

Numpy 沿特定维度展开数组,numpy,multidimensional-array,reshape,tensor,numpy-ndarray,Numpy,Multidimensional Array,Reshape,Tensor,Numpy Ndarray,我有一个数组,如下所示: arr = np.arange(2*1*15).reshape(2, 1, 15) 现在,我如何扩展此数组以形成(2、10、15)。要填充值,可以使用与原始数组的(1,15)部分相同的值(即从最后两个维度开始)。您可以使用沿第二个轴复制值: np.repeat(arr, 10, axis=1).shape # (2, 10, 15) 可以使用沿第二个轴复制值: np.repeat(arr, 10, axis=1).shape # (2, 10, 15) 同时,我发

我有一个数组,如下所示:

arr = np.arange(2*1*15).reshape(2, 1, 15)
现在,我如何扩展此数组以形成
(2、10、15)
。要填充值,可以使用与原始数组的
(1,15)
部分相同的值(即从最后两个维度开始)。

您可以使用沿第二个轴复制值:

np.repeat(arr, 10, axis=1).shape
# (2, 10, 15)
可以使用沿第二个轴复制值:

np.repeat(arr, 10, axis=1).shape
# (2, 10, 15)

同时,我发现它也可以做这项工作

作为一个小的人为的例子:

In [8]: np.broadcast_to(arr, (2, 5, 15))
Out[8]: 
array([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14]],

       [[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]])

性能注意事项:计时后,我发现
numpy.broadcast\u to
numpy.repeat
快约40倍。 原因是:


它的速度更快,因为它创建了一个只读的数据视图,其中有许多元素指向相同的内存位置。如果复制结果,则性能大致相同。如果您不需要编辑最终结果,它将提供巨大的性能提升


同时,我发现它也可以做这项工作

作为一个小的人为的例子:

In [8]: np.broadcast_to(arr, (2, 5, 15))
Out[8]: 
array([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14]],

       [[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]])

性能注意事项:计时后,我发现
numpy.broadcast\u to
numpy.repeat
快约40倍。 原因是:


它的速度更快,因为它创建了一个只读的数据视图,其中有许多元素指向相同的内存位置。如果复制结果,则性能大致相同。如果您不需要编辑最终结果,它将提供巨大的性能提升


它的速度更快,因为它创建了一个只读的数据视图,其中有许多元素指向相同的内存位置。如果您
复制
结果,则性能大致相同。如果您不需要编辑最终结果,它将提供一个巨大的性能增益,速度更快,因为它创建了一个只读的数据视图,其中许多元素指向相同的内存位置。如果您
复制
结果,则性能大致相同。如果您不需要编辑最终结果,它将提供巨大的性能提升