TypeError:返回的数组必须是ArrayType



epsData是由DatesStockID组成的二维数组。

为了使它简单,我去掉了一些代码。

代码调用Generateneweps函数,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))

有两个错误:

  1. 假设您想要在(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))
    
  2. 无论如何,在if语句中使用logical_and是没有意义的。它返回一个数组,该数组不具有真值。也就是说,logical_and的结果是一个布尔值数组,其中一些为真,一些为假。您是否希望检查它们是否全部为真?或者至少一些为真?

    如果是前者,那么你应该测试它:

    if numpy.all(logical_and(...)):
       ...
    

    如果是后者,则测试为:

    if numpy.any(logical_and(...)):
       ...
    

相关内容

  • 没有找到相关文章

最新更新