[英]how to efficiently select multiple slices from an array?
給定一個數組
d = np.random.randn(100)
和索引數組
i = np.random.random_integers(low=3, high=d.size - 5, size=20)
我怎樣才能有效地創建一個二維數組r
與
r.shape = (20, 8)
這樣對於所有j=0..19
,
r[j] = d[i[j]-3:i[j]+5]
在我的情況下,數組非常大(〜200000,而不是100和20),所以快速操作會很有用。
您可以創建數據的窗口視圖,即(93, 8)
數組,其中項[i, j]
是原始數組的項[i+j]
,如下所示:
>>> from numpy.lib.stride_tricks import as_strided
>>> wd = as_strided(d, shape=(len(d)-8+1, 8), strides=d.strides*2)
現在,您可以將所需的切片提取為:
>>> r = wd[i-3]
請注意, wd
只是原始數據的視圖,因此不占用額外的內存。 使用任意索引提取r
時,將復制數據。 因此,根據您想使用r
數組的方式,您可能希望盡可能地延遲它,甚至完全避免它:您始終可以像wd[j-3]
一樣訪問r[j]
行,而無需觸發副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.