这样学 2 天搞定 NumPy

NumPy系列已推送以下三篇:

图解入门 NumPy,来了!

介绍 NumPy 的五种玩法

NumPy 100 道练习题,原版 PDF

今天是施工专题NumPy部分最后一篇,一起重温NumPy中一些有趣且重大的特性。NumPy 最核心的一个对象:ndarray,封装的多维数组,除了存储数据本身外,还会记录元素类型即 dtype,且每个元素占用内存大小都均匀相等,如下创建 8 个 int64 型整数,计算总字节数的方法:

import numpy as np

a = np.arange(8).reshape(2,4)
a
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

# 计算占用占用的字节数
a.size * a.itemsize
64

数据分析工作,NumPy二维数组用的多;数据挖掘的话,高维数组用的就会更多,NumPy的强项正在于此,正所谓Python没有的NumPy有,Python有的NumPy更强。如下,创建同样shape的随机数组,Python要比NumPy慢232倍:

In[5]: %timeit np.random.randint(1,1000,(100,1000))
332 µs ± 2.39 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
]


In[6]: import random

In[6]: %timeit [random.randint(1,100) for _ in range(100) for _ in range(1000)] 
77.2 ms ± 315 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

# 创建同样的(100,1000)的随机数组
# Python原生是NumPy计算耗时的232倍
In[7]: 77.2 * 1000 / 332 
232.53012048192772

NumPy 闪电处理速度,主要得益于操作直接发生在元素级,而 Python 会创建更多其他额外对象,数据处理性能上无法与NumPy相媲美。

正无穷在NumPy中是 np.inf,空值是 np.nan ,它们都是一个类对象。

更多知识,列如数据类型 int63, float32,…,astype类型转化,reshape函数,数组扁平操作ravel, flatten,切片和索引,按照向量的加减乘除,统计函数,等等

这本《NumPy 100页精华》PDF,拿出两三天时间,敲一遍,基本就算掌握NumPy了,如果对资料感兴趣,私信讨论,一起进步。

© 版权声明

相关文章

暂无评论

none
暂无评论...