python - 简单移动平均二维数组python

标签 python arrays numpy

我正在尝试计算 2D 数组的每一行的简单移动平均值。每行中的数据都是一个单独的数据集,因此我不能只计算整个数组的 SMA,我需要在每一行中单独计算。我尝试过 for 循环,但它将窗口视为行,而不是单个值。

我用来计算 SMA 的方程是:a1+a2+...an/n 这是我到目前为止的代码:

import numpy as np  


#make amplitude array
amplitude=[0,1,2,3, 5.5, 6,5,2,2, 4, 2,3,1,6.5,5,7,1,2,2,3,8,4,9,2,3,4,8,4,9,3]


#split array up into a line for each sample
traceno=5                  #number of traces in file
samplesno=6                #number of samples in each trace. This wont change.

amplitude_split=np.array(amplitude, dtype=np.int).reshape((traceno,samplesno))

#define window to average over:
window_size=3

#doesn't work for values that come before the window size. i.e. index 2 would not have enough values to divide by 3
#define limits:
lowerlimit=(window_size-1)
upperlimit=samplesno

i=window_size

for row in range(traceno):
  for n in range(samplesno):
    while lowerlimit<i<upperlimit:
      this_window=amplitude_split[(i-window_size):i] 

      window_average=sum(this_window)/window_size

      i+=1
      print(window_average)

我对此数据集的预期输出是:

[[1,    2,    3.33, 4.66]
 [3,    2.66, 2.66, 3.  ]
 [4,    6,    4.33, 3.33]
 [4.33, 5,    7,    5.  ]
 [5,    5.33, 7,    5.33]]

但我得到:

[2.         3.         3.         4.66666667 2.66666667 3.66666667]
[2.66666667 3.66666667 5.         5.         4.         2.33333333]
[2.         4.33333333 7.         5.         6.33333333 2.33333333]

最佳答案

可以对window_size[1, 1, ..., 1]进行卷积,然后除以window_size得到平均值(不需要循环):

from scipy.signal import convolve2d

window_average = convolve2d(amplitude_split, np.ones((1, window_size)), 'valid') / window_size)

的卷积基本上是将窗口中的元素相加。

输出:

[[1.         2.         3.33333333 4.66666667]
 [3.         2.66666667 2.66666667 3.        ]
 [4.         6.         4.33333333 3.33333333]
 [4.33333333 5.         7.         5.        ]
 [5.         5.33333333 7.         5.33333333]]

关于python - 简单移动平均二维数组python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61519313/

相关文章:

python - SQLAlchemy( flask )中的外键在插入数据库之前发生变化?

python - 在 Python 中使用 OpenCV 相位展开函数

php - 是什么让这两个阵列相加不同?

python - 计算多维 numpy 数组元素的内部点积

python - 为什么 numpy 比 for 循环慢

python - 设置Python截图参数

python - 如何在 macOS 上的 Sublime Text 3 上运行 Python3?

C 循环中的 char 数组赋值?

c++如何释放和删除指向对象的二维数组

python - 对称矩阵及其转置的逻辑比较