Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有web2py和numpy的类型错误消息_Python_Numpy_Web2py - Fatal编程技术网

Python 带有web2py和numpy的类型错误消息

Python 带有web2py和numpy的类型错误消息,python,numpy,web2py,Python,Numpy,Web2py,这里有点困惑。我有一些直接运行良好的代码: results = INPUT dates = set(results[0]) sectors = set(results[2]) columns = ["Port Wt", "Bench Wt", "Port Retn", "Bench Retn", "Attrib", "Select", "Inter", "Total"] results.fillna(0,inplace=True) sectors = sorted(sectors) test

这里有点困惑。我有一些直接运行良好的代码:

results = INPUT
dates = set(results[0])
sectors = set(results[2])
columns = ["Port Wt", "Bench Wt", "Port Retn", "Bench Retn", "Attrib", "Select", "Inter", "Total"]
results.fillna(0,inplace=True)

sectors = sorted(sectors)
test = np.ones([len(sectors) + 1, len(columns)])
for date in dates:
    day = results[results[0] == date]
    for n, sector in enumerate(sectors):
        s = day[day[2] == unicode(sector)]
        pw = s.iloc[:,4].sum()
        bw = s.iloc[:,6].sum()
        pr = s.apply(lambda x: x.ix[5]/100 * x.ix[4], axis=1).sum().sum()
        br = s.apply(lambda x: x.ix[5]/100 * x.ix[6], axis=1).sum().sum()
        test[n,:] *= [(1. + pw)**(1./len(dates)), (1.+bw) ** (1./len(dates)), 1. + pr , 1. + br , 1. ,
                      1. , 1. , 1.]
test -= 1.
但当我在web2py控制器中运行它时

def test():
    portfolio = "usequity"
    benchmark = "SP500"
    startdate = "2013-01-11 00:00:00"
    enddate = "2013-01-30 00:00:00"
    level1 = 'sector'
    level2 = 'industry'
    i1 = datadrawn.results(portfolio,benchmark,startdate,enddate,level1,level2,cr)
    i2 = datadrawn.sectors(i1['portfolio'], i1['benchmark'])
    i3 = datadrawn.brinson(i2)
    return dict(i3=i3)
我得到了错误

<type 'exceptions.TypeError'>(unsupported operand type(s) for *=: 'numpy.ndarray' and 'list')
一些研究表明,这可能是数组输入错误,但据我所知,我已将所有内容都转换回float


非常感谢您的帮助。

根据您的分享,不清楚您是否在web2py内外运行相同的代码(即web2py代码如何调用第一个代码块?)。另外,在第一段代码中,看起来您在
*=
的左侧有一个数据数组,在右侧有一个列表——如果
*=
不支持这两种类型,那么这应该会失败。您好@Anthony,为过于简洁表示歉意。web2py将第一个块作为模块导入调用。它是名为
datadraw
的模块中的方法之一。当直接在模块中运行时,这肯定会起作用,因此我非常确信numpy方面可以工作……很清楚,第一个代码块是
datadraw.results
方法定义的一部分?在这种情况下,第一步是确认web2py使用与外部运行该方法时完全相同的参数(和参数类型)调用该方法。关于这个错误,您是说TypeError在某种程度上是错误的,
*=
实际上应该支持一个ndarray和一个列表,还是说代码实际上不包括一个ndarray和一个列表?Hi@Anthony。是,第一个代码块是datadraw.results的一部分。我刚刚尝试过将
np.array([1,2,3,4],dtype='d')*=[1,2,3,1]
相乘,结果成功了,所以我猜类型错误不会像一个小问题那样有意义。您应该尝试使用web2py中的确切参数调用
datadraw.results
方法,以查看是否出现相同的错误(看起来所有参数都只是固定字符串,除了
cr
,它没有出现在您显示的代码中)。
locals request session response
locals
INPUT   :    0 4 ... ... ... ... [6422 rows x 7 columns]
br      :    0.0002428845794774927
bw      :    0.12515205797541681
columns :   ['Port Wt', 'Bench Wt', 'Port Retn', 'Bench Retn', 'Attrib', 'Select', 'Inter', 'Total']
date    :    u'2013-01-11 00:00:00'
dates   :    set([u'2013-01-11 00:00:00', u'2013-01-14 00:00:00', u'2013-01-15 00:00:00', u'2013-01-16 00:00:00', u'2013-01-17 00:00:00', u'2013-01-18 00:00:00', ...])
day     :    0 4 ..... ... ... [494 rows x 7 columns]
n       :    0
pr      :   -9.970633274708913e-05
pw      :    0.075036537596357311
results :    0 4 ... ... ... ... [6422 rows x 7 columns]
s       :    0 4 ...... ... ... [82 rows x 7 columns]
sector  :    u'Consumer Discretionary'
sectors :   [u'Consumer Discretionary', u'Consumer Staples', u'Energy', u'Financials', u'Health Care', u'Industrials', u'Information Technology', u'Materials', u'Telecommunications Services', u'Utilities']
test    :    array([[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],...0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]], dtype=float64)