【发布时间】:2020-02-07 17:19:24
【问题描述】:
我有一个二维 numpy 数组 D,它的维度为 (1000, 800)。我想从数组中提取长度为 20 的小段:
假设 D[0][:] 是 [1, 2, 3, 4, 5, 6, ...] 并且我想要长度为 3 的段,我想要前三个数字 (1, 2, 3),然后跳过一些索引(比如 60),提取 3,跳过 60,依此类推。
我知道我可以做 D[:,start:end:step],但是有没有类似 D[:,start:end:step*:skip*] 的东西?
理想情况下,我想要这样的东西:
D = np.random.random((1000,800))
parts = D[:,0:20:1:skip_n_indices_and_repeat]
感谢您的宝贵时间和回答。如果您有更简单或不同的解决方案,请提出。谢谢。
【问题讨论】:
-
我猜你的例子太复杂了,因为你可以将它最小化,给出一个一维数组的最小工作示例
-
这就是
as_strided的用途:docs.scipy.org/doc/numpy/reference/generated/… 或者您可以尝试重新调整数组的形状,使感兴趣的元素放置在特定的轴上。例如,假设您有一个一维数组,您可以将其重塑为(:, 10)以获得 10 的步幅,然后提取前三列以便每 10 个元素获得三个元素。 -
如果跳过是 3 的倍数,您可以将
D重塑为(1000, -1, 3)(在这种情况下,您必须先切掉最后几列),然后您可以使用切片[:, ::20](或[::21],如果你想跳过60个值而不计算三个选择的值),然后重新整形回(1000, -1)(在这种情况下它会形成(1000, 15))。