TA-Lib numpy" AssertionError:真实并非双重"

时间:2014-04-10 15:59:07

标签: python numpy

我在python中使用TA-Lib包装器有AssertionError。你能看看我的代码吗?我非常感谢你的帮助。

import numpy as np
import talib

#This works
test_data = np.random.random(5)
np_out = talib.SMA(test_data,3)
print np_out

#How come this does not work?  I need to fix
real_data = [135.01, 133.0, 134.0, 131.0, 133.0, 131.0]
np_real_data = np.array(real_data,dtype=np.object)
np_out = talib.SMA(np_real_data,3)
print np_out

错误消息:

  File "func.pyx", line 9200, in talib.func.SMA (talib/func.c:85610)
AssertionError: real is not double

我暂停解决方案可能是将double转换为real。我想测试这个想法。如何将real_data从double转换为real?

感谢。

2 个答案:

答案 0 :(得分:10)

  

我怀疑解决方案可能是将double转换为real。

没有。你有真实的数据。 TA-lib不喜欢“真实数据”。您想将其转换为双浮点数据。

re:qcc无法解释的答案:

f8是64位“双精度”浮点数。 http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

TA-lib希望将“双”浮点数块作为输入。

http://en.wikipedia.org/wiki/Double-precision_floating-point_format

您可以使用多种方法来获取目的地,可能最适合您的目的是:

    real_data = [135.01, 133.0, 134.0, 131.0, 133.0, 131.0]
    float_data = [float(x) for x in real_data]
    np_float_data = np.array(float_data)
    np_out = talib.SMA(np_float_data,3)

以下是其他几个:

1)

    real_data = [float(x) for x in [135.01, 133.0, 134.0, 131.0, 133.0, 131.0]]
    np_real_data = np.array(real_data)
    np_out = talib.SMA(np_real_data,3)

2)

    real_data = [135.01, 133.0, 134.0, 131.0, 133.0, 131.0]
    np_real_data = np.array(real_data, dtype='f8')
    np_out = talib.SMA(np_real_data,3)

3)

    real_data = [135.01, 133.0, 134.0, 131.0, 133.0, 131.0]
    np_real_data = np.array(real_data, dtype=float)
    np_out = talib.SMA(np_real_data,3)

4)

    real_data = map(float, [135.01, 133.0, 134.0, 131.0, 133.0, 131.0])
    np_real_data = np.array(real_data)
    np_out = talib.SMA(np_real_data,3)

5)

    real_data = [float(135.01), float(133.0), float(134.0), float(131.0), 
                 float(133.0), float(131.0)]
    np_real_data = np.array(real_data)
    np_out = talib.SMA(np_real_data,3)

答案 1 :(得分:2)

试试这个

np_real_data = np.array(real_data,dtype='f8')