【问题标题】:NumPy Array vs. a regular Python listNumPy 数组与常规 Python 列表
【发布时间】:2014-07-11 01:58:37
【问题描述】:

我正在开发一个将股票数据存储在数组中的程序。该计划仍在进行中。该程序从 yahoo Finance 中提取数据,并将数据存储在一个 numpy 数组中。如果股票达到新高,则会弹出警报。

这里有一些问题:

  1. 为什么我必须使用 numpy 数组而不是常规列表来执行此功能?换句话说,numpy数组有哪些优点或特点?

  2. 您能告诉我如何了解有关 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)

【问题讨论】:

  • 1.阅读FAQ。 2.阅读docs
  • Python 列表被奇怪地实现为数组而不是链表,所以我相信两者之间的性能差异应该不会产生太大的差异。如果它是一个真正的链表,我会投票给列表,因为到末尾的插入是 O(1) 并且你正在做很多插入,但因为它不是我认为数组和列表将具有可比的性能。
  • @Tommy,“奇怪地实现为数组”的更正式名称是dynamic arrays,我不确定它有什么“奇怪”。
  • 感谢 MattDMo 提供的文档链接。 numpy数组能做而python列表不能做的有什么特别之处吗?
  • 感谢您的澄清,但我想我是老派; list 对我来说尖叫“链表”,所以我发现命名欺骗/奇怪。对于插入,链表甚至比这些动态数组还要快。我不喜欢不合并这两种数据类型,因为它们的操作效率对于不同的操作是不同的。话虽如此,我相信你可以在 Python 中得到一个链表。

标签: python arrays numpy


【解决方案1】:

可以在herehere找到一些有用的信息。

numpy 数组的主要优点是在执行大多数数值运算时,它们比 Python 列表快得多。例如,将序列中的每个元素乘以单个其他常数,或将一个序列中的每个元素乘以另一个序列中的相应元素,在 numpy.此外,对于多维结构,numpy 数组支持更强大的索引,例如允许您按行和列进行切片。

由于这一基本优势,numpy 数组已成为基本上每个执行大量数字运算的 Python 项目的事实上的标准。这意味着许多其他工具都是基于 numpy 数组构建的(例如,使用 matplotlib 绘图、使用 scikit-learn 进行机器学习等)。

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 2010-11-02
    • 1970-01-01
    • 2023-02-20
    • 2022-01-25
    • 2015-06-22
    • 2020-09-06
    相关资源
    最近更新 更多