a = frame_query("select ....",db)
在我的代码中,var 'c'是一个numpy。我要画的narray。然而,当我执行下面的代码,我得到一个空的情节!
for i in a.values:
c = (i[:1]-a.values[-1:])/a.values[-1:]*100
plt.plot(c)
plt.show()
print c
给:
[[ 28.57142857]]
[[ 27.27272727]]
[[ 27.92207792]]
[[ 28.57142857]]
[[ 22.07792208]]
[[ 22.07792208]]
[[ 22.07792208]]
我到底哪里错了?
提前感谢。
调整代码的最简单方法可能是在循环之前开始一个空列表,在循环中将c
中的值附加到它上面,然后在循环之后绘制它。例如:
c_series = []
for i in a.values:
c = (i[:1]-a.values[-1:])/a.values[-1:]*100
c_series.append(c[0])
plt.plot(c)
plt.show()
注意在这里使用c[0]
是安全的,因为上面一行的逻辑保证了ndarray
只有一个成员。
然而,这是处理数据结构的一种有点奇怪的方式。由于a.values
似乎是ndarray
,您也可以简单地通过使用numpy提供的对数组执行算术运算的工具来做到这一点(我无法测试它,因为我没有a.values
的逐字副本):
const = a.values[-1:]
c_series = (a.values - const) / const*100
plt.plot(c_series)
plt.show()
通常-当使用numpy数组时,通常最好将它们保持为数组(称为代码向量化),而不是在循环中逐个元素处理它们。