Numpy的基础用法(一)

Numpy的基础用法(一),第1张

本章主要说明2个方面的问题:1. 数组的构造及其优势; 2. 常用的数学函数与统计函数;

1、我们为什么要使用Numpy,Numpy具备哪些优势。我们举例说明:我们以人类体重BIM的计算公式为例:BIM指数=体重(kg)/ 身高(m)的平方

height = [170, 175, 174, 180, 195]
weight = [65, 75, 90, 110, 98]
BIM = weight/ (height / 100) ** 2

用上述方法,我们会发现,代码会报错。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
      1 height = [170, 175, 174, 180, 195]
      2 weight = [65, 75, 90, 110, 98]
----> 3 BIM = weight/ (height / 100) ** 2

TypeError: unsupported operand type(s) for /: 'list' and 'int'w

为什么呢?因为编程语言里列表list是一个容器,并不具备运算功能。这个时候我们通常的做法如下:

height = [170, 175, 174, 180, 195]
weight = [65, 75, 90, 110, 98]
BIM = []
for index in range(len(height)):
    BIM.append(weight[index] / (height[index] / 100) ** 2)
BIM

看一下输出结果:

[22.49134948096886,
 24.489795918367346,
 29.72651605231867,
 33.95061728395061,
 25.77251808021039]

那有没有更好的办法呢?

我们在这里可以使用Numpy的array函数可以将列表或元组转换为数组。代码如下。

import numpy as np
height = np.array([170, 175, 174, 180, 195])
weight = np.array([65, 75, 90, 110, 98])
BIM = weight/ (height / 100) ** 2
BIM

当然到了这里,会有人疑问,为什么不直接用Python的列表循环来执行呢?Numpy的数组的优势在哪呢?下面我们会用示例来说明。

我们依然以BIM的运算来举例,当我们自定义100万组数据,以100万组数据求BIM值所需要的时间来看一下,用循环的方式和array分别所需时间进行比较。代码如下:


import numpy as np
import random

# 伪造100万组数据
h = []
w = []
for i in range(10000000):
    h.append(random.randint(155,188))
    w.append(random.uniform(52,95))

使用循环的方式,记录运行时间

%%time
bmi = []
for i in range(10000000):
    bmi.append(w[i]/(h[i]/100) ** 2)

这个%%time在jupyter里可以直接使用,记录这一段代码运行所需要的时间,我们可以看到运行的时间:CPU times: user 3.74 s, sys: 264 ms, total: 4 s Wall time: 4.13 s 执行这段代码一共用了4秒。

%%time
H = np.array(h)
W = np.array(w)
BMI = W/(H/100)**2

使用np.array()进行运算,得到的时间:CPU times: user 65.9 ms, sys: 38.4 ms, total: 104 ms Wall time: 118 ms,总共只用了118毫秒,相比python原生的循环,效率快了很多倍(可以自己计算)

综上所述:使用numpy在处理大数据时,会比使用python的列表或者字典,效率都要快很多。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/919112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存