0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

List和Numpy Array有什么区别

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-30 10:49 次阅读

Numpy 是Python科学计算的一个核心模块。它提供了非常高效的数组对象,以及用于处理这些数组对象的工具。一个Numpy数组由许多值组成,所有值的类型是相同的。

Python的核心库提供了 List 列表。列表是最常见的Python数据类型之一,它可以调整大小并且包含不同类型的元素,非常方便。

那么List和Numpy Array到底有什么区别?为什么我们需要在大数据处理的时候使用Numpy Array?答案是性能。

Numpy数据结构在以下方面表现更好:

1.内存大小—Numpy数据结构占用的内存更小。

2.性能—Numpy底层是用C语言实现的,比列表更快。

3.运算方法—内置优化了代数运算等方法。

下面分别讲解在大数据处理时,Numpy数组相对于List的优势。

1.内存占用更小

适当地使用Numpy数组替代List,你能让你的内存占用降低20倍。

对于Python原生的List列表,由于每次新增对象,都需要8个字节来引用新对象,新的对象本身占28个字节(以整数为例)。所以列表 list 的大小可以用以下公式计算:

64 + 8 * len(lst) + len(lst) * 28 字节

图片

而使用Numpy,就能减少非常多的空间占用。比如长度为n的Numpy整形Array,它需要:

96 + len(a) * 8 字节

图片

可见,数组越大,你节省的内存空间越多。假设你的数组有10亿个元素,那么这个内存占用大小的差距会是GB级别的。

2.速度更快、内置计算方法

运行下面这个脚本,同样是生成某个维度的两个数组并相加,你就能看到原生List和Numpy Array的性能差距。

import time
import numpy as np

size_of_vec = 1000

def pure_python_version():
    t1 = time.time()
    X = range(size_of_vec)
    Y = range(size_of_vec)
    Z = [X[i] + Y[i] for i in range(len(X)) ]
    return time.time() - t1

def numpy_version():
    t1 = time.time()
    X = np.arange(size_of_vec)
    Y = np.arange(size_of_vec)
    Z = X + Y
    return time.time() - t1


t1 = pure_python_version()
t2 = numpy_version()
print(t1, t2)
print("Numpy is in this example " + str(t1/t2) + " faster!")

结果如下:

0.00048732757568359375 0.0002491474151611328
Numpy is in this example 1.955980861244019 faster!

可以看到,Numpy比原生数组快1.95倍。

如果你细心的话,还能发现,Numpy array可以直接执行加法操作。而原生的数组是做不到这点的,这就是Numpy 运算方法的优势。

我们再做几次重复试验,以证明这个性能优势是持久性的。

import numpy as np
from timeit import Timer

size_of_vec = 1000
X_list = range(size_of_vec)
Y_list = range(size_of_vec)
X = np.arange(size_of_vec)
Y = np.arange(size_of_vec)

def pure_python_version():
    Z = [X_list[i] + Y_list[i] for i in range(len(X_list)) ]

def numpy_version():
    Z = X + Y

timer_obj1 = Timer("pure_python_version()",
                   "from __main__ import pure_python_version")
timer_obj2 = Timer("numpy_version()",
                   "from __main__ import numpy_version")

print(timer_obj1.timeit(10))
print(timer_obj2.timeit(10)) # Runs Faster!

print(timer_obj1.repeat(repeat=3, number=10))
print(timer_obj2.repeat(repeat=3, number=10)) # repeat to prove it!

结果如下:

0.0029753120616078377
0.00014940369874238968
[0.002683573868125677, 0.002754641231149435, 0.002803879790008068]
[6.536301225423813e-05, 2.9387418180704117e-05, 2.9171351343393326e-05]

可以看到,第二个输出的时间总是小得多,这就证明了这个性能优势是具有持久性的。

所以,如果你在做一些大数据研究,比如金融数据、股票数据的研究,使用Numpy能够节省你不少内存空间,并拥有更强大的性能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据处理
    +关注

    关注

    0

    文章

    595

    浏览量

    28556
  • Array
    +关注

    关注

    99

    文章

    18

    浏览量

    17828
  • python
    +关注

    关注

    56

    文章

    4793

    浏览量

    84631
收藏 人收藏

    评论

    相关推荐

    预定义和不预定义什么区别

    0x01#define down_array0x02#define clear_array 0x03#define function_array 0x04#define null0类似这种预定义和不预定义
    发表于 02-25 06:35

    List中的ArrayList和LinkedList什么区别

    明白 List 中 ArrayList 和 LinkedList 什么区别,这简直太遗憾了,这两者其实都是数据结构中的基础内容,这篇文章会从基础概念开始,分析两者在 Java 中的具体源码实现,寻找
    发表于 12-23 07:21

    锂亚电池 锂电池什么区别

    锂亚电池 锂电池什么区别
    发表于 10-30 08:51 3263次阅读

    hdmi与vga什么区别

    现在的有线连接一般都是利用HDMI和VGA这两种接口,但HDMI和VGA接口到底什么区别呢?
    的头像 发表于 01-24 13:58 3.9w次阅读

    RTOS和 TSOS什么区别

    RTOS和TSOS什么区别
    的头像 发表于 03-12 11:22 4565次阅读

    荣耀50和p50什么区别

    荣耀50和p50什么区别
    的头像 发表于 08-26 17:54 1.4w次阅读

    单片机和PLC什么区别

    单片机和PLC什么区别
    发表于 11-13 19:21 11次下载
    单片机和PLC<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?

    单片机和PLC什么区别

    单片机和PLC什么区别
    发表于 11-23 16:21 79次下载
    单片机和PLC<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?

    Vivado Schematic中的实线和虚线什么区别

    Vivado Schematic中的实线和虚线什么区别
    的头像 发表于 06-06 11:13 1156次阅读
    Vivado Schematic中的实线和虚线<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?

    Vivado Schematic中的实线和虚线什么区别

    Vivado Schematic中的实线和虚线什么区别
    的头像 发表于 06-16 16:53 1159次阅读
    Vivado Schematic中的实线和虚线<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?

    EML与DML:什么区别?该如何选择?

    DML和EML什么区别?该如何选择?本文将回答这些问题。
    的头像 发表于 06-30 10:43 2399次阅读
    EML与DML:<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?该如何选择?

    FPC与传统PCB到底什么区别.zip

    FPC与传统PCB到底什么区别
    发表于 03-01 15:37 4次下载

    pcb软板和硬板什么区别

    pcb软板和硬板什么区别
    的头像 发表于 12-19 10:01 1947次阅读

    hdi板与普通pcb什么区别

    hdi板与普通pcb什么区别
    的头像 发表于 12-28 10:26 2801次阅读

    线路板的层和阶什么区别

    线路板的层和阶什么区别
    的头像 发表于 02-23 17:27 712次阅读