我希望有人能救我脱离自己。我正在尝试为TA-Lib创建一个需要为numpy.ndarray的输入数组。我的原始数据在dict列表中作为浮点数。我有以下代码工作,但它似乎是一个可怕的方式来做到这一点。我正在尝试用浮点数的长度“块”创建ndarray,然后用dict值列表填充它,其中“results”看起来像这个截断的版本:
import numpy as np
import pylab
import talib
from talib.abstract import Function
from matplotlib.dates import epoch2num
results=[{'min': 23.154066666666665, 'max': 23.298, 'price': 23.257773259460716, 'amount': 95.17532800000002, 'date': 1389336300, 'close': 23.22373, 'open': 23.26123287671233},
{'min': 23.134200000000003, 'max': 23.339819999999996, 'price': 23.271289011315073, 'amount': 2131.7753154199972, 'date': 1389336120, 'close': 23.26123287671233, 'open': 23.25126987951807}]
open = np.ndarray(shape=(blocks), dtype=float)
close = np.ndarray(shape=(blocks), dtype=float)
high = np.ndarray(shape=(blocks), dtype=float)
low = np.ndarray(shape=(blocks), dtype=float)
volume = np.ndarray(shape=(blocks), dtype=float)
ts = np.ndarray(shape=(blocks), dtype=float)
inputs = {}
for i in range(len(results)):
open[i] = results[i].get('open')
high[i] = results[i].get('max')
low[i] = results[i].get('min')
close[i] = results[i].get('close')
volume[i] = results[i].get('amount')
ts[i] = epoch2num(results[i].get('date'))
inputs['open'] = open
inputs['high'] = high
inputs['low'] = low
inputs['close'] = close
inputs['volume'] = volume
inputs['ts'] = ts
sma = Function('sma')
input_arrays = sma.get_input_arrays()
for key in input_arrays.keys():
input_arrays[key] = inputs[key]
output = sma(input_arrays, timeperiod=3)
我正在关注ta-lib的简短api文档,为'sma'函数创建有效字段的inputs_array,这是有效的,但这是我一段时间以来看到过的最丑陋的事情。由于我提前知道块大小,似乎我不应该做所有这些迭代,但我只是在学习Python,所以我希望有人可以告诉我一个更好/更快的方法来做到这一点。 / p>
由于
答案 0 :(得分:1)
您可以使用列表推导
results = ...
inputs['open'] = np.array([r.get('open') for r in results], dtype=float)
...
答案 1 :(得分:0)
inputs = {key: np.array([result[key] for result in results]) for key in results[0]}
for new, old in [('high', 'max'), ('low', 'min'), ('volume', 'amount')]:
inputs[new] = inputs.pop(old)
inputs['ts'] = np.array(map(epoch2num, inputs.pop('date')))
del inputs['price']
主要是第一行,其余的只处理重命名等。但是,假设results
中所有词典中的键始终相同,并且至少有一个结果。如果这些要求不合适,请评论。