【发布时间】:2019-08-13 17:45:22
【问题描述】:
我有一个数组如下:
arr = np.arange(2*1*15).reshape(2, 1, 15)
现在,我如何扩展这个数组来塑造(2, 10, 15)。要填写这些值,可以使用与原始数组的(1, 15) 部分相同的值(即从最后两个维度)。
【问题讨论】:
标签: numpy multidimensional-array reshape tensor numpy-ndarray
我有一个数组如下:
arr = np.arange(2*1*15).reshape(2, 1, 15)
现在,我如何扩展这个数组来塑造(2, 10, 15)。要填写这些值,可以使用与原始数组的(1, 15) 部分相同的值(即从最后两个维度)。
【问题讨论】:
标签: numpy multidimensional-array reshape tensor numpy-ndarray
您可以使用numpy.repeat 沿第二个轴复制值:
np.repeat(arr, 10, axis=1).shape
# (2, 10, 15)
【讨论】:
与此同时,我发现numpy.broadcast_to 也可以完成这项工作。
作为一个人为的小例子:
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_to 大约是。与 numpy.repeat 相比,速度快 40 倍。
reason for this performance gain 是因为:
它更快,因为它创建了一个数据的只读视图,其中包含许多指向相同内存位置的元素。如果复制结果,则性能大致相同。如果您不需要编辑最终结果,它会提供巨大的性能提升
【讨论】:
copy这个结果,性能差不多。如果您不需要编辑最终结果,它会提供巨大的性能提升