epsData
是一个由Dates
和StockID
组成的二维数组。
我拿出了一些代码,以简化它。
代码调用函数Generate
和neweps
,epsData
由引擎传递。我不确定为什么当我尝试将数组epsss
传递给SUE()
函数时它会出错。
我尝试使用flatten函数删除数组中的额外括号(如果有),但这没有帮助。
SUE()
应该遍历数组并找到第4个最后一个不同的值,然后将它们存储在数组中。
我收到此错误:
TypeError: return arrays must be of ArrayType
以下标有三行:
def lastdifferentvalue(vals,datas,i):
sizes=len(datas)
j=sizes-1
values=0
while (i>0) and (j>=0):
if logical_and((vals-datas[j]!=0),(datas[j]!=0),(datas[j-1]!=0)): # !! HERE !!
i=i-1
values=datas[j-1]
j=j-1
return j, values
def SUE(datas):
sizes=len(datas)
j=sizes-1
values=0
sues=zeros(8)
eps1=datas[j]
i=7
while (j>0) and (i>=0) :
counts, eps2=lastdifferentvalue(eps1,array(datas[0:j]),4)
if eps2!=0:
sues[i]=eps1-eps2
i=i-1
j,eps1=lastdifferentvalue(eps1,datas[0:j],1) # !! HERE !!
stddev=std(SUE)
sue7=SUE[7]
return stddev,sue7
def Generate(di,alpha):
#the code below loops through the data. neweps is a two dimensional array of floats [dates, stockid]
for ii in range(0,len(alpha)):
if (epss[2,ii]-epss[1,ii]!=0) and (epss[2,ii]!=0) and (epss[1,ii]!=0):
predata=0
epsss= neweps[di-delay-250:di-delay+1,ii]
stddevs,suedata= SUE(array(epsss.flatten())) # !! HERE !!
答案 0 :(得分:0)
据推测,您正在以
的形式使用numpy.logical_and
np.logical_and(a, b, c)
意思是你想要采取逻辑和三个。但是,如果您查看文档,那不是它的作用。它将c
解释为您打算存储结果的数组。
你可能在这里的意思是
np.logical_and(a, np.logical_and(b, c))
答案 1 :(得分:0)
该行:
if logical_and((vals-datas[j]!=0),(datas[j]!=0),(datas[j-1]!=0))
有两个错误:
据推测,您希望执行logical_and
而不是(vals-datas[j] != 0)
和 (datas[j] != 0)
和 (datas[j-1] != 0)
。但是numpy.logical_and
只接受两个输入参数,第三个如果传递则假定为输出数组。因此,如果您希望numpy.logical_and
对三个数组进行操作,则应表示为:
logical_and(logical_and((vals-datas[j] != 0), (datas[j] != 0)), (datas[j-1] != 0))
在任何情况下,在logical_and
语句中使用if
都没有意义。它返回一个数组,并且数组没有真值。也就是说,logical_and
的结果是一个布尔数组,其中一些是真的而一些是假的。您是否希望检查它们是否全部是真的吗?或者,如果至少某些是真的吗?
如果是前者,则应将其测试为:
if numpy.all(logical_and(...)):
...
如果后者然后将其测试为:
if numpy.any(logical_and(...)):
...