簡體   English   中英

如何有效地從數組中選擇多個切片?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM