我正在寻找一种方法来同时从numpy数组中选择多个切片。假设我们有一个1D数据数组,并希望提取其中的三部分,如下所示:
data_extractions = []
for start_index in range(0, 3):
data_extractions.append(data[start_index: start_index + 5])
之后data_extractions
将是:
data_extractions = [
data[0:5],
data[1:6],
data[2:7]
]
在没有for循环的情况下有没有办法执行上述操作?numpy中的某种索引方案,它允许我从数组中选择多个切片,并将它们作为多个数组返回,比如在n+1维数组中?
我想也许我可以复制我的数据,然后从每一行中选择一个范围,但是下面的代码抛出一个索引器错误
replicated_data = np.vstack([data] * 3)
data_extractions = replicated_data[[range(3)], [slice(0, 5), slice(1, 6), slice(2, 7)]
在本文中,有一种使用^{} 的
strided-indexing scheme
方法,它基本上在输入数组中创建一个视图,因此对于创建视图来说非常有效,并且作为一个视图占用的内存空间也很少。 此外,这也适用于具有通用维度数的nDarray。以下是实现方法-
为
4D
数组情况运行示例-您可以使用索引选择要放入适当形状的行。 例如:
stride_tricks
可以做到请注意,
b
引用了与a
相同的内存,实际上多次引用(例如,b[0, 1]
和b[1, 0]
是相同的内存地址)。因此,在使用新结构之前复制是最安全的。nd可以以类似的方式完成,例如2d->;4d
相关问题 更多 >
编程相关推荐