【发布时间】:2014-07-11 01:58:37
【问题描述】:
我正在开发一个将股票数据存储在数组中的程序。该计划仍在进行中。该程序从 yahoo Finance 中提取数据,并将数据存储在一个 numpy 数组中。如果股票达到新高,则会弹出警报。
这里有一些问题:
为什么我必须使用 numpy 数组而不是常规列表来执行此功能?换句话说,numpy数组有哪些优点或特点?
您能告诉我如何了解有关 numpy.loadtxt 的更多信息吗?我试着找http://www.numpy.org
非常感谢,下面是我目前的程序...
import urllib2
import time
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
def pullData(stock):
try:
print 'Pulling ' + stock
print str(datetime.datetime.fromtimestamp(int(time.time())).strftime('%Y-%m-%d %H:%M:%S'))
urltovisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1d/csv'
stockFile = []
try:
f = urllib2.urlopen(urltovisit)
sourceCode = f.read().decode('utf-8')
splitSource = sourceCode.split('\n')
for eachLine in splitSource:
splitLine = eachLine.split(',')
fixMe = splitLine[0]
if len(splitLine) == 6:
if 'values' not in eachLine:
fixed = eachLine.replace(fixMe,str(datetime.datetime.fromtimestamp(int(fixMe)).strftime('%Y-%m-%d %H:%M:%S')))
stockFile.append(fixed)
except Exception, e:
print str(e), 'failed to organize pulled data'
date, closep, highp, lowp, openp, volume = np.loadtxt(stockFile,delimiter=',', unpack=True, converters={ 0: mdates.strpdate2num('%Y-%m-%d %H:%M:%S')})
if highp[-1] == max(highp):
print stock + ' New high ' + str(max(highp))
else:
print ' no new high '
except Exception, e:
print str(e), 'failed to pull pricing data'
stockName = raw_input('Enter a stock: ')
pullData(stockName)
【问题讨论】:
-
Python 列表被奇怪地实现为数组而不是链表,所以我相信两者之间的性能差异应该不会产生太大的差异。如果它是一个真正的链表,我会投票给列表,因为到末尾的插入是 O(1) 并且你正在做很多插入,但因为它不是我认为数组和列表将具有可比的性能。
-
@Tommy,“奇怪地实现为数组”的更正式名称是
dynamic arrays,我不确定它有什么“奇怪”。 -
感谢 MattDMo 提供的文档链接。 numpy数组能做而python列表不能做的有什么特别之处吗?
-
感谢您的澄清,但我想我是老派; list 对我来说尖叫“链表”,所以我发现命名欺骗/奇怪。对于插入,链表甚至比这些动态数组还要快。我不喜欢不合并这两种数据类型,因为它们的操作效率对于不同的操作是不同的。话虽如此,我相信你可以在 Python 中得到一个链表。