Skip to main content
 首页 » 编程设计

python之在一维数组中以不规则的间隔分配一个序列之Python/NumPy

2025年05月04日20jirigala

我有一个数字序列,我想以不规则的间隔插入到一个更大的数组中:

dates = np.zeros(15) 
pattern = np.arange(3) + 1 
starts = [2, 6, 11] 
for start in starts: 
    dates[start:start + pattern.size] = pattern 
 
> [0 0 1 2 3 0 1 2 3 0 0 1 2 3 0] 

我必须在大型 (10K+) 数组上执行这么多 (100M+) 次,所以我正在寻找一种通过广播或其他有效方法来执行此操作的方法,从而避免 for 循环。如果有帮助,模式将始终是一个范围。

请您参考如下方法:

我们可以利用 np.lib.stride_tricks.as_strided基于 scikit-image's view_as_windows将滑动窗口 View 获取到输出数组中,从而将新值分配给它。这将非常有效,因为我们正在处理 View ,没有生成显式索引并且分配是矢量化和广播的。

实现看起来像这样-

from skimage.util.shape import view_as_windows 
 
view_as_windows(dates,pattern.size)[starts] = pattern 

More info on use of as_strided based view_as_windows .