我在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
Run Code Online (Sandbox Code Playgroud)
错误信息:
File "func.pyx", line 9200, in talib.func.SMA (talib/func.c:85610)
AssertionError: real is not double
Run Code Online (Sandbox Code Playgroud)
我暂停解决方案可能是将double转换为real.我想测试这个想法.如何将real_data从double转换为real?
谢谢.
lit*_*nce 11
我怀疑解决方案可能是将double转换为real.
不,你有真实的数据.TA-lib不喜欢"真实数据".您想将其转换为双浮点数据.
re:qcc无法解释的答案:
f8是64位"双精度"浮点数. http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
TA-lib希望将numpy数组的"双"浮点数作为输入.
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)
Run Code Online (Sandbox Code Playgroud)
以下是其他几个:
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)