【问题标题】:How to calculate average value of items in a 3D array?如何计算 3D 数组中项目的平均值?
【发布时间】:2020-04-11 17:50:45
【问题描述】:

我正在尝试获取参数的平均值,然后使用给定函数进行绘图。我想我必须以某种方式填充一个 3 列数组,然后取该数组的平均值。我想为 popt[0] 、 popt[1] 和 popt[2] 创建 1000 个值,然后取所有这些值的平均值,然后绘制它们。

for n in range(0,1000):
    params=np.zeros(3,1000)
    y3=y2+np.random.normal(loc=0.0,scale=0.1*y2)
    popt,pcov=optimize.curve_fit(fluxmeasureMW,bands,y3)
    params.append(popt[0],popt[1],popt[2])
    a_avg=st.mean(params[0:])
    b_avg=st.mean(params[1:])
    e_avg=st.mean(params[2:])

最终目标是剧情:

fluxmeasureMW(bands,a_avg,b_avg,e_avg)

我只是不确定如何迭代拟合函数以输出 1000 个值。 1000 是任意的,我只想要一个好的样本量。 y2 和波段的值已经定义,可以毫无问题地绘制,以及函数fluxmeasureMW。

【问题讨论】:

  • 不太清楚您要做什么。 fluxmeasureMW 是返回标量还是数组? bands 是否已定义 - 它是什么? a(b)(e)_avg 应该是什么 - 标量或数组?假设 scipy.optimize.curve_fitpopt 是优化的(非因变量)参数 - 你为什么要取它们的平均值?
  • fluxmeasureMW 返回一个数组,bands 是一个永远不会改变的值数组,a_avg、b_avg 和 e_avg 都应该是标量。我想取他们的意思,因为我编写的代码每次运行都会给数据增加一些噪音,但是每次运行代码时这种噪音都会改变,所以我不断得到不同的参数值。
  • 您想运行拟合一千次,每次都为y 参数添加一点噪音,然后获得优化参数的平均值。?优化了三个参数?
  • a(b)(e)_avg 是位置参数还是关键字参数? y2 是标量?

标签: python arrays numpy average


【解决方案1】:

说你的函数是这样的

def fluxmeasureMW(x,f,g,h):
    return result_of_calc

只需循环运行拟合即可;将popts累积在一个列表中,然后取平均值

from scipy import optimize
import numpy as np

n = 1000
t = []
for i in range(n):
    y3 = y2 + np.random.normal(loc=0.0,scale=.1*y2)
    popt,pcov = optimize.curve_fit(fluxmeasureMW,bands,y3)
    t.append(popt)

f,g,h = np.mean(t,0)

t 将是一个列表列表...

[[f,g,h],
 [f,g,h],
 ...]

np.mean(t,0) 将平均上的值。

你也可以使用

import statistics
a = [[0, 1, 2],
     [1, 2, 3],
     [2, 3, 4],
     [3, 4, 5]]

for column in zip(*a):
    #print(column)
    print(statistics.mean(column))

【讨论】:

  • 谢谢!我会看看这是否有效。您能否解释一下 np.mean(t,0) 在做什么?我知道它取平均值,但我不知道为什么需要零
  • 这正是它应该做的,谢谢!
  • 如何绘制一列中的所有值与另一列中的值?现在我有:plt.plot(t[0],t[1],'o',label='a vs b')plt.plot(t[0],t[2],'o',label='a vs e')plt.plot(t[1],t[3],'o',label='b vs e')
  • a,b,e = zip(*t) 将为您提供三个单独的 - transposes the list of lists。然后plt.plot(a,b);plt.plot(a,e);plt.plot(b,e) 如果这是您的意图。 Pyplot tutorial
  • 有没有办法制作一个平均协方差矩阵?我想打印拟合参数的协方差矩阵,但现在我只能打印 for 循环中最后一次拟合的最后一个协方差矩阵。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2014-05-14
相关资源
最近更新 更多