Numpy: TypeError: Não é possível lançar dados da matriz de dtype ('float64') para dtype ('<u32 according="" to="" the="" rule=""/>

Criado em 11 jul. 2018  ·  2Comentários  ·  Fonte: numpy/numpy

Usando o OS X 10.12 e usando a versão: 1.15.0rc2 de numpy. Estou vendo este erro:

  File "temp.py", line 103, in computeMACD
    emaslow = ExpMovingAverage(x, slow)
  File "temp.py", line 93, in ExpMovingAverage
    a =  np.convolve(values, weights, mode='full')[:len(values)]
  File "/Users/x/xx/graph/lib/python3.6/site-packages/numpy/core/numeric.py", line 1045, in convolve
    return multiarray.correlate(a, v[::-1], mode)
TypeError: Cannot cast array data from dtype('float64') to dtype('<U32') according to the rule 'safe'

Estou vendo este erro ao usar este código amplamente disponível:

 def ExpMovingAverage(values, window):
     weights = np.exp(np.linspace(-1., 0., window))
     weights /= weights.sum()
     a =  np.convolve(values, weights, mode='full')[:len(values)]
     a[:window] = a[window]
     return a

Meus valores são preços de ações reais, ['93 .89 ', '89 .89', '87 .17 ', '90 .57', '88 .92 ', '90 .46' ...]. A janela é 26. Não tenho certeza por que tantas pessoas fazem referência ao código acima que não está funcionando para mim. Alguma ideia do que está errado aqui?

Comentários muito úteis

Seus dados são strings. Eles deveriam ser números.

 ['93.89', '89.89', '87.17', '90.57', '88.92', '90.46'...]

deveria estar

 [93.89, 89.89, 87.17, 90.57, 88.92, 90.46]

Isso é verificado usando

v = ['93.89', '89.89', '87.17', '90.57', '88.92', '90.46']*30
ExpMovingAverage(v,10)

TypeError: Cannot cast array data from dtype('float64') to 
dtype('<U32') according to the rule 'safe'

e

ExpMovingAverage(list(map(float,v)),10)

array([89.6938941 , 89.6938941 , 89.6938941 , 89.6938941 ...

Todos 2 comentários

Seus dados são strings. Eles deveriam ser números.

 ['93.89', '89.89', '87.17', '90.57', '88.92', '90.46'...]

deveria estar

 [93.89, 89.89, 87.17, 90.57, 88.92, 90.46]

Isso é verificado usando

v = ['93.89', '89.89', '87.17', '90.57', '88.92', '90.46']*30
ExpMovingAverage(v,10)

TypeError: Cannot cast array data from dtype('float64') to 
dtype('<U32') according to the rule 'safe'

e

ExpMovingAverage(list(map(float,v)),10)

array([89.6938941 , 89.6938941 , 89.6938941 , 89.6938941 ...

Obrigada. Isso resolveu meu problema

Esta página foi útil?
0 / 5 - 0 avaliações