TA-Lib numpy "AssertionError: real 不是双精度

10 投票
2 回答
14332 浏览
提问于 2025-04-18 02:13

我在用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从双精度数转换成实数呢?

谢谢。

2 个回答

4

试试这个

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

我怀疑解决方案可能是把双精度转换为实数。

不对。你有的是实数数据,但TA-lib不喜欢“实数数据”。你需要把它转换成双精度浮点数据。

关于qcc的未解释答案:

f8是一个64位的“双精度”浮点数。

TA-lib需要输入的是“双精度”浮点数的numpy数组。

有几种方法可以达到你的目的,可能最适合你的方法是:

    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)

撰写回答