将数组保存在列表中是一种好方法吗?

时间:2014-12-13 17:32:11

标签: python arrays

我正在尝试学习python并开始我想用方形误差函数来实现多项式曲线拟合。所以下一个列表是numpy.polyfit函数的系数,其中多项式的阶数从0到4:

[array([-0.01819394]), array([-1.40744691,  0.68552951]), array([ 0.80998048, -2.21742739,  0.80552662]), array([ 22.23999663, -32.55001446,  10.44015094,   0.03673661]), array([ -2.85384060e+00,   2.79476778e+01,  -3.61085071e+01,
     1.11448029e+01,   1.79458912e-02]), array([ -5.89070987e+01,   1.44413906e+02,  -1.00532825e+02,
     9.34450117e+00,   5.69193834e+00,   7.78017045e-02])]

输出来自以下代码:

polyfit = []
for i in range(0,numberofdata):
     polyfit.append(numpy.polyfit(x,noisedsignal,i))

列出这些结果是否被认为是一种好方法?如果是,在找到每个订单的平方误差之后如何按顺序获取每个值?

3 个答案:

答案 0 :(得分:1)

这很好。如果它从一开始就清楚你将要做多少适合,那么使用二维数组可能是有意义的。

在任何情况下,polyfit的结果都可以直接用于numpy.polyval函数来评估拟合多项式。您也可以执行类似

的操作
for p in polyfits:
    print(" + ".join(
                      "%s x ** %s" % (coeff, len(p) - n - 1)
                      for n, coeff in enumerate(p)
                    ))

打印出多项式。在此处使用列表没有相关的惩罚。

答案 1 :(得分:0)

不,不是。

您应该执行以下操作:

  

your_variable = [[-0.01819394],[ - 1.40744691,0.68552951],[0.80998048,-2.21742739,0.80552662],[22.23999663,-32.55001446,10.44015094,0.03673661],[ - 。2.85384060e + 00,2.794076778e + 01, -3.61085071e + 01,        1.11448029e + 01,1.79408912e-02],[ - 5.89070987e + 01,1.44413906e + 02,-1.00532825e + 02,        9.34450117e + 00,5.69193834e + 00,7.78017045e-02]]

现在要检索一些元素,你只需按照你应该使用本机Python列表(数组)对象的方式。

your_variable[1][1]0.68552951your_variable[4][2]-3.61085071e+01

答案 2 :(得分:-2)

您有一个列表,其中包含元组包含列表的元组。这真的没有必要。首先,如果你想定义它们,为什么在元组中呢?

  

array([ - 0.01819394])它是一个有列表的元组。

元组进程比列表进程更快。但是元组是不可变的变量。我通常使用列表,它们之间没有很大的速度差异,你可以改变列表元素。

  

例如,您想在数组中调用 0.68552951 ([ - 1.40744691,0.68552951])

list=[array([-0.01819394]),array([-1.40744691,  0.68552951]),...]
print (list[1][1])

它表示列表第二个元素的第二个元素。