2017-09-30 16 views
0

多項式をリストに格納したいが、リストにそれらを追加すると、変数xが失われ、係数だけが失われる。今poly1D()関数からリストに多項式を格納する

import numpy as np 
from numpy import random 
from pylab import * 
from sklearn.metrics import r2_score 

np.random.seed(2) 
pageSpeeds = np.random.normal(3.0, 1.0, 1000) 

# purchaseAmount function (non-linear) 
purchaseAmount = np.random.normal(50.0, 10.0, 1000)/pageSpeeds 

x = np.array(pageSpeeds) 
y = np.array(purchaseAmount) 

polyfitInit = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0, 14:0, 15:0} 
polyforms = [] 
for c in polyfitInit: 
    z = np.poly1d(np.polyfit(x, y, c)) 
    r2 = r2_score(y, z(x)) 
    polyfitInit[c] = r2 
    polyforms.append(z) 

print polyforms 

Ouptut:

[poly1d([-9.04306562、46.68709008])、poly1d([3.73263241、-31.78596189、77.53159067] ...]

出力が欲しかっ: [-9.043 X + 46.69、3.73263241x^2 + -31.78596189x + 77.53159067 ...]

みんなありがとう

答えて

0

poly1dこのクラスのオブジェクトを作成します。

In [153]: p = np.poly1d([1,2,3]) 
In [156]: type(p) 
Out[156]: numpy.lib.polynomial.poly1d 

このクラスのreprは、取得した文字列です。 strはあなたが

In [159]: repr(p) 
Out[159]: 'poly1d([1, 2, 3])' 
In [160]: str(p) 
Out[160]: ' 2\n1 x + 2 x + 3' 
In [161]: print(p) 
    2 
1 x + 2 x + 3 

がリストにこれらのいくつかを入れたい文字列である、リストのあなたのpolyforms

In [162]: alist = [p, p] 
In [163]: alist 
Out[163]: [poly1d([1, 2, 3]), poly1d([1, 2, 3])] 
In [164]: print(alist) 
[poly1d([1, 2, 3]), poly1d([1, 2, 3])] 

印刷reprフォーム、ないstrを表示します。

表示文字列と実際のオブジェクトは区別されます。私のalistは実際のpoly1dオブジェクトのリストです。文字列表現のリストではありません。変数xpoly1dオブジェクトの一部ではありません。

poly1dのキー属性またはデータがそのcoef

In [165]: p.coef 
Out[165]: array([1, 2, 3]) 

ですし、リストの各要素に対して評価を行うことができます。

In [172]: [q(.5) for q in alist] 
Out[172]: [4.25, 4.25] 
関連する問題