有一个numpy方法在区间中每三个元素做一个总和?例如:
import numpy as np
mydata = np.array([4, 2, 3, 8, -6, 10])
Run Code Online (Sandbox Code Playgroud)
我想得到这个结果:
np.array([9, 13, 5, 12])
Run Code Online (Sandbox Code Playgroud)
Div*_*kar 14
我们可以用np.convolve-
np.convolve(mydata,np.ones(3,dtype=int),'valid')
Run Code Online (Sandbox Code Playgroud)
基本思想convolution是我们有一个内核可以在输入数组中滑动,并且卷积操作在内核滑过时将元素乘以内核元素.因此,为了解决窗口大小的问题3,我们使用了三个内核1s生成的np.ones(3).
样品运行 -
In [334]: mydata
Out[334]: array([ 4, 2, 3, 8, -6, 10])
In [335]: np.convolve(mydata,np.ones(3,dtype=int),'valid')
Out[335]: array([ 9, 13, 5, 12])
Run Code Online (Sandbox Code Playgroud)
从 开始Numpy 1.20,sliding_window_view提供了一种在元素窗口中滑动/滚动的方法。然后您可以单独求和的窗口:
from numpy.lib.stride_tricks import sliding_window_view
# values = np.array([4, 2, 3, 8, -6, 10])
np.sum(sliding_window_view(values, window_shape = 3), axis = 1)
# array([9, 13, 5, 12])
Run Code Online (Sandbox Code Playgroud)
在哪里:
window_shape是滑动窗口的大小np.sum(array, axis = 1)子数组求和滑动的中间结果为:
sliding_window_view(np.array([4, 2, 3, 8, -6, 10]), window_shape = 3)
# array([[ 4, 2, 3],
# [ 2, 3, 8],
# [ 3, 8, -6],
# [ 8, -6, 10]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3421 次 |
| 最近记录: |