python - 取数组中每 2 个数据点的平均值,创建一个新数组
问题描述
我试图取一个数组中每 2 个值的平均值,并将新数据存储在一个新数组中。
这是我能得到的:
y1 = np.array([1,2,3,4,5,6,7,8,9,10])
avgy = [0]*(len(y1)//2)
for i in range (0, len(y1)-1):
if (2*(1+i)<=len(y1)):
avgy[i] = ( y1[i+2[i]] + y1[2+2*i] )/2
print(avgy)
这是我收到的错误消息:
TypeError Traceback (most recent call last)
<ipython-input-8-624d78987390> in <module>()
9 for i in range (0, len(y1)-1):
10 if (2*(1+i)<=len(y1)):
---> 11 avgy[i] = ( y1[i+2[i]] + y1[2+2*i] )/2
12
13 print(avgy)
TypeError: 'int' object is not subscriptable
我将不胜感激任何可以提供的帮助。奥利弗
解决方案
y1 = np.array([1,2,3,4,5,6,7,8,9,10)]
avgy = ((y1 + np.roll(y1,1))/2.0)[1::2]
编辑:这种方法比使用 for 循环快 20 倍左右,比使用 zip 和列表理解快 90 倍左右。
推荐阅读
- json - 自适应卡片 - actionSet JSON 转义 URL 参数
- java - 此数据类型不允许获取自定义约束 (Hibernate-validator 6.0.22.Final)
- javascript - Bridge.NET / Retyped:绑定可以更新吗?
- typescript - 使用 jest 创建模拟对象
- plsql - 使用 .pak 扩展名存储的 plsql 文件的 sonarqube 扫描仪不扫描
- python - 如何使用 guizero ListBox 将数据库中的值格式化为统一的列
- c# - 如果在堆栈跟踪中抛出了一些异常,应该捕获哪个异常?
- communication - 即使奇偶校验不匹配,STM32 和监视器之间的 UART 通信也能顺利进行
- firebase - 函数内部的 Firebase Session 区分
- google-app-engine - 在 Google App Engine 中使用 JNI