相关疑难解决方法(0)

Numpy中1D阵列的滚动窗口?

有没有办法在Numpy中有效地实现1D阵列的滚动窗口?

例如,我有这个纯Python代码片段来计算1D列表的滚动标准偏差,其中observations是1D值列表,并且n是标准差的窗口长度:

stdev = []
for i, data in enumerate(observations[n-1:]):
    strip = observations[i:i+n]
    mean = sum(strip) / n
    stdev.append(sqrt(250*sum([(s-mean)**2 for s in strip])/(n-1)))
Run Code Online (Sandbox Code Playgroud)

有没有办法在Numpy中完全执行此操作,即没有任何Python循环?标准偏差是微不足道的numpy.std,但滚动窗口部分完全残留我.

我发现这篇关于Numpy滚动窗口的博文,但它似乎不适用于1D阵列.

python numpy window

34
推荐指数
5
解决办法
2万
查看次数

Python/NumPy首次出现子数组

在Python或NumPy中,找出第一次出现的子阵列的最佳方法是什么?

例如,我有

a = [1, 2, 3, 4, 5, 6]
b = [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

找出b出现在哪里的最快方法(运行时间)是什么?我理解字符串这非常容易,但对于列表或numpy ndarray呢?

非常感谢!

[编辑]我更喜欢numpy解决方案,因为从我的经验来看,numpy矢量化比Python列表理解要快得多.同时,大数组是巨大的,所以我不想把它转换成字符串; 这将是(太长).

python arrays numpy

22
推荐指数
5
解决办法
2万
查看次数

按模式查找布尔掩码

我有阵列:

arr = np.array([1,2,3,2,3,4,3,2,1,2,3,1,2,3,2,2,3,4,2,1])
print (arr)
[1 2 3 2 3 4 3 2 1 2 3 1 2 3 2 2 3 4 2 1]
Run Code Online (Sandbox Code Playgroud)

我想找到这个模式并返回booelan mask:

pat = [1,2,3]
N = len(pat)
Run Code Online (Sandbox Code Playgroud)

我用strides:

#https://stackoverflow.com/q/7100242/2901002
def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    c = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
    return c
print (rolling_window(arr, N))
[[1 2 3]
 [2 3 2]
 [3 2 3]
 [2 3 4]
 [3 4 …
Run Code Online (Sandbox Code Playgroud)

python arrays boolean numpy stride

5
推荐指数
1
解决办法
281
查看次数

标签 统计

numpy ×3

python ×3

arrays ×2

boolean ×1

stride ×1

window ×1