【发布时间】:2018-05-12 09:26:24
【问题描述】:
我目前正在尝试将卡方分析应用于某些数据。 我想根据模型的两个系数绘制不同值的颜色图
def f(x, coeff):
return coeff[0] + numpy.exp(coeff[1] * x)
def chi_squared(coeff, x, y, y_err):
return numpy.sum(((y - f(x, coeff) / y_err)**2)
us = numpy.linspace(u0, u1, n)
vs = numpy.linspace(v0, v1, n)
rs = numpy.meshgrid(us, vs)
chi = numpy.vectorize(chi_squared)
chi(rs, x, y, y_error)
我尝试对函数进行矢量化,以便能够传递不同系数的网格来生成颜色图。
x、y、y_err 的值都是长度为 n 的一维数组。 u, v 是各种变化系数。
但是这不起作用,导致
IndexError: invalid index to scalar variable.
这是因为 coeff 作为标量而不是向量传递,但我不知道如何纠正。
更新
我的目标是获取坐标数组
rs = [[[u0, v0], [u1, v0],..,[un, v0]],...,[[u0, vm],..,[un,vm]]
其中每个坐标是要传递给卡方方法的系数参数。 这应该返回一个二维数组,其中填充了适当坐标的卡方值
chi = [[c00, c10, ..., cn0], ..., [c0m, c1m, ..., cnm]]
然后我可以使用这些数据通过 imshow 绘制颜色图
【问题讨论】:
-
较新的
vectorize采用signature参数。如果您提供一个示例f函数,我们也许能够计算出正确的签名。看起来我需要样品x和y。我也想知道你是否需要vectorize。chi_squared中的表达式可能会正确广播数组。总之,我们需要更多的工作示例。 -
取 f 为添加了指数项的二阶多项式。将更新一个工作示例
-
x、yy_error是标量,还是需要包含在广播中?需要注意的另一件事是rs来自meshgrid是 2 个数组的列表。vectorize将把它包装在np.asarray中,生成一个 3d 数组。np.sum没有轴,返回一个值(即,它对扁平数组求和)。 -
这个“工作示例”包括:未定义的 u0、未定义的 u1、未定义的 n、未定义的 v0、未定义的 v1、未定义的 x、未定义的 y、未定义的 y_error 和 chi_squared 函数中不匹配的括号。不是我对工作示例的想法。无论如何,hpaulj 已经告诉了你答案:meshgrid 并没有按照你的想法去做,请再次阅读它的描述。
-
道歉。我不熟悉工作示例的概念,特别是因为我没有这样的工作代码。我研究了 meshgrid,我正在更新我的代码
标签: python numpy vectorization chi-squared