epsData
是由Dates
和StockID
组成的二维数组。
为了使它简单,我去掉了一些代码。
代码调用Generate
和neweps
函数,epsData
由引擎传递。我不知道为什么当我试图将数组epsss
传递给SUE()
函数时,它会出现错误。
我试图通过使用flatten函数来删除数组中额外的括号(如果有的话),但这没有帮助。
SUE()
应该循环遍历数组并找到最后第四个不同的值,然后将这些值存储在数组中。
我得到这个错误:
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 !!
假设您使用的是numpy.logical_and
,格式为
np.logical_and(a, b, c)
的意思是你想取三个中的逻辑和。但是,如果您查看文档,就会发现它不是这样做的。它将c
解释为您打算存储结果的数组。
你可能是指像
这样的东西np.logical_and(a, np.logical_and(b, c))
或
from functools import reduce
reduce(np.logical_and, [a, b, c])
一行:
if logical_and((vals-datas[j]!=0),(datas[j]!=0),(datas[j-1]!=0))
有两个错误:
假设您想要在
(vals-datas[j] != 0)
和(datas[j] != 0)
和(datas[j-1] != 0)
上执行logical_and
。然而,numpy.logical_and
只接受两个输入参数,第三个if被认为是一个输出数组。因此,如果您希望numpy.logical_and
对三个数组进行操作,则应表示为:logical_and(logical_and((vals-datas[j] != 0), (datas[j] != 0)), (datas[j-1] != 0))
无论如何,在
if
语句中使用logical_and
是没有意义的。它返回一个数组,该数组不具有真值。也就是说,logical_and
的结果是一个布尔值数组,其中一些为真,一些为假。您是否希望检查它们是否全部为真?或者至少一些为真?如果是前者,那么你应该测试它:
if numpy.all(logical_and(...)): ...
如果是后者,则测试为:
if numpy.any(logical_and(...)): ...