【发布时间】:2021-06-28 19:43:06
【问题描述】:
我有一个 2D 数组,我想将其转换为 3D 数组,其中新数组的每一行都包含原始 2D 数组的多行。
此代码复制了功能(输出数组的每一行包含 3 行输入数组)但我只是想知道正确的方法是什么,我认为更正确的索引方法会更快大型数据集。
input = np.arange(100) + np.arange(100)[:,None]
output = np.apply_along_axis(lambda x: input[x[0]:x[0]+3], 1, np.arange(100-2)[:,None])
input 数组如下所示:
array([[ 0, 1, 2, ..., 97, 98, 99],
[ 1, 2, 3, ..., 98, 99, 100],
[ 2, 3, 4, ..., 99, 100, 101],
...,
[ 97, 98, 99, ..., 194, 195, 196],
[ 98, 99, 100, ..., 195, 196, 197],
[ 99, 100, 101, ..., 196, 197, 198]])
output 数组看起来像这样:
array([[[ 0, 1, 2, ..., 97, 98, 99],
[ 1, 2, 3, ..., 98, 99, 100],
[ 2, 3, 4, ..., 99, 100, 101]],
[[ 1, 2, 3, ..., 98, 99, 100],
[ 2, 3, 4, ..., 99, 100, 101],
[ 3, 4, 5, ..., 100, 101, 102]],
[[ 2, 3, 4, ..., 99, 100, 101],
[ 3, 4, 5, ..., 100, 101, 102],
[ 4, 5, 6, ..., 101, 102, 103]],
...,
[[ 95, 96, 97, ..., 192, 193, 194],
[ 96, 97, 98, ..., 193, 194, 195],
[ 97, 98, 99, ..., 194, 195, 196]],
[[ 96, 97, 98, ..., 193, 194, 195],
[ 97, 98, 99, ..., 194, 195, 196],
[ 98, 99, 100, ..., 195, 196, 197]],
[[ 97, 98, 99, ..., 194, 195, 196],
[ 98, 99, 100, ..., 195, 196, 197],
[ 99, 100, 101, ..., 196, 197, 198]]])
【问题讨论】:
-
input是np.arange(100) + np.arange(100)[:, None],对吧?输出形状为(98, 3, 100)? -
哇,这样更干净(我的 numpy 生锈了,所以我更新了问题)。但是,是的,你是对的。