分配一个不规则间隔的序列给1D数组 - Python / NumPy

2024-04-20 10:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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循环。模式将始终是一个范围,如果这有帮助。你知道吗


Tags: 方法inforsize间隔npzeros序列
2条回答

我们可以利用基于^{}^{}将滑动窗口视图放到输出数组中,从而将新值赋给它。这将是相当有效的,因为我们正在处理视图,没有显式索引的生成和分配是一个矢量化和广播的。你知道吗

这个实现看起来像这样-

from skimage.util.shape import view_as_windows

view_as_windows(dates,pattern.size)[starts] = pattern

More info on use of ^{} based ^{}。你知道吗

构造一个2D选择器数组来选择要用numpy.add.outer修改的dates的索引,然后对所选索引执行pattern的广播赋值:

dates[numpy.add.outer(starts, numpy.arange(len(pattern)))] = pattern

相关问题 更多 >