当前位置: 首页 > 面试题库 >

Python-与常规Python列表相比,NumPy有什么优势?

宗啸
2023-03-14
问题内容

与常规Python列表相比,NumPy有什么优势?

我有大约100个金融市场系列,我将创建一个100x100x100 = 1百万个单元的多维数据集数组。我将每个x与y和z回归(3变量),以用标准误差填充数组。

我听说对于“大型矩阵”,出于性能和可伸缩性的原因,我应该使用NumPy而不是Python列表。事实是,我知道Python列表,它们似乎对我有用。

如果我转到NumPy,会有什么好处?

如果我有1000个序列(即立方体中有10亿个浮点单元)怎么办?


问题答案:

NumPy的数组比Python列表更紧凑-您在Python中描述的列表列表至少需要20 MB左右,而单元格中具有单精度浮点数的NumPy 3D数组则需要4 MB。使用NumPy可以更快地读取和写入项目。

也许您只关心一百万个单元就不会那么在意,但是您肯定会关心十亿个单元-两种方法都不适合32位体系结构,但是使用64位版本,NumPy可以节省约4 GB ,仅Python一个就需要至少约12 GB(很多指针的大小加倍),这是一个昂贵得多的硬件!

差异主要是由于“间接性”造成的-Python列表是指向Python对象的指针的数组,每个指针至少4个字节,对于最小的Python对象也至少包含16个字节(类型指针为4,引用计数为4,类型为4值-内存分配器向上舍入为16)。NumPy数组是统一值的数组-单精度数字每个占用4个字节,双精度数字每个占用8个字节。灵活性较差,但您要为标准Python列表的灵活性付出高昂的代价!



 类似资料:
  • 问题内容: 最近,我正在与另一位程序员讨论重构充满“ if”语句的巨大(1000行)方法的最佳方法。 该代码是用Java编写的,但我想这个问题也可能在其他语言(例如C#)中发生。 为了解决这个问题,他建议使用责任链模式。他建议开设一个基本的“处理程序”类。然后,“ Handler1”,“ Handler2”等将扩展“ Handler”。 然后,处理程序将具有“ getSuccessor”方法,该方

  • 问题内容: 用…实现事情 似乎 已经 很简单 了… 与 ngResource相比 ,使用Restangular 有哪些优点/缺点? 1.1.3 将返回承诺,并且可以使用[最新的PRcommit来实现。将来会提供支持来支持Restangular所做的其他动词吗?如果发生这种情况,Restangular似乎将消失并变得不耐烦。 问题答案: 我是Restangular的创建者。 我已经在自述文件中创建了

  • 问题内容: 我正在使用Flask构建一个网站,现在正在为其添加一些日志记录的过程中找到了这些文档。基本示例如下: 之后您可以使用登录。这很好用,但是除了我没有看到比常规python日志记录模块没有任何优势的事实之外,我还看到了一个主要的缺点:如果我想在请求上下文之外进行日志记录(例如,使用cron作业运行某些代码) )我收到错误消息,因为我在请求上下文之外使用应用程序。 所以我的主要问题是 为什么

  • 问题内容: Java 5以Executor框架的形式引入了对线程池执行异步任务的支持,其核心是java.util.concurrent.ThreadPoolExecutor实现的线程池。Java 7以java.util.concurrent.ForkJoinPool的形式添加了备用线程池。 查看它们各自的API,ForkJoinPool在标准情况下提供了ThreadPoolExecutor功能的超

  • 问题内容: 据我所知,并为64位有符号/无符号整数-就像/ 。而且我也明白,这不仅是别名(例如-> 是),因此在适用时需要将其转换为,反之亦然。但是,使用一个相对于另一个有什么好处?使用常规类型是否会影响运行时性能? 抱歉,如果这是一个常见问题-我曾在Google上搜索过答案(并在此处进行搜索),因为我曾以为其他人可能早就出现了,但是没有找到任何人回答它们对性能的影响( (如果有的话),内存使用情

  • 问题内容: 过去,我的几个Ajax应用程序都使用GET请求,但是现在我开始使用POST请求。POST请求似乎更安全,并且绝对更友好/漂亮。因此,我想知道是否有任何原因使我应该使用GET请求。 问题答案: 我通常这样设置问题: 请求后有什么重要的变化吗? (尽管有日志记录等)。如果是,则应该是POST请求,如果不是,则应该是GET请求。 我很高兴您将POST请求称为“稍微”更安全,因为这几乎就是它们