【发布时间】:2021-02-09 21:28:22
【问题描述】:
我有一个numpy.arraya,形状为(8, 16000, 2),代表8 个立体声音频,每个1s 长。我想从每个记录中采样一个 0.5 秒的子样本。因此,我通过以下方式对开始和结束索引进行采样:
a = np.random.rand(8, 16000, 2)
possible_starts = np.arange(8000)
start_idxs = np.random.choice(possible_starts, size=a.shape[0])
end_idxs = start_idxs + 8000
如何在 numpy 高效中为每一行提取这些不同的切片? 我显然可以循环执行:
b = np.zeros((8, 8000, 2))
for i in range(a.shape[0]):
b[i] = a[i, start_idxs[i]: end_idxs[i], :]
但我想以矢量化的方式进行。
【问题讨论】:
-
您的示例代码使用
a和b而不定义它们 -
@fountainhead 我说它有一个形状 (8, 16000, 2)。它可以是任何这样的 np.array。
-
如果您提供代码生成示例数据,您将获得更多帮助,以便我们可以复制、粘贴和直接测试代码。这样想:我们想帮忙,但我们也很懒!
-
那么,每个切片的形状都一样吗?
-
@Divakar 是的,在这种情况下是 8000
标签: python numpy slice numpy-ndarray