举一反三学python(5)—初识数组

文章通过计算五位成年人的BMI指数,展示了使用Python列表循环和numpy数组进行计算的两种方法。对比了两者的效率,指出在处理大量数据时,numpy数组的计算速度明显优于列表,且代码更简洁。通过1千万条数据的测试,证明了数组计算的高效性。
摘要由CSDN通过智能技术生成

一、引例

        大家对MBI(身体质量指数)都有所了解吧!

        MBI(身体质量指数)
        MBI指数计算方法为体重除以身高的平方,其中体重的单位为千克,身高的单位为米。
        正常中国人的BMI范围区间在18.5~23.9之间。
        当BMI指数>23.9说明身体目前的体重已经超过了当前身高所符合的标准体重,此时需要患者及时调整饮食结构,同时积极地参加体育锻炼,减去身体上多余的脂肪。从而维持体重在正常范围内。
        当BMI指数<18.5时,说明身体目前的体重低于了当前身高所符合的标准体重,此时需要患者及时调整饮食结构,增加蛋白质和其他营养物质的摄入,同时积极参加体育锻炼,来使机体利用所摄取的营养物质来增加体重。从而维持体重在正常范围内。

        下面三个列表分别表示五位成年人的姓名、身高、体重。如何用python代码,实现输出个人BMI指标。首先,大家应该想到用列表的for循环就可以实现:

        name = ['孙一','刘二','张三','李四','王五',]
        height = [175, 162, 158, 173, 167]
        weight = [55, 60, 63, 80, 82]

二、列表的for循环

代码如下:     
name = ['孙一', '刘二', '张三', '李四','王五',]
height = [175,162,158,173,167]
weight = [55,60,63,80,82]
for i in range(len(height)):
    BMI = round(weight[i]/(height[i]/100)**2,2)        # 保留2位小数
    if 18.5 > BMI:
        print(f'{name[i]}:BMI是{BMI},偏瘦。')
    elif 18.5 <= BMI < 23.9:
        print(f'{name[i]}:BMI是{BMI},标准!')
    else:
        print(f'{name[i]}:BMI是{BMI},肥胖。')

运行代码结果:

1b51f4c51dca47e4a62b6f34ea7d9af5.png

        在计算BMI时,用到列表for循环,其实运算不方便,而且速度慢。这就引入了数组,它可以实现高效运算。

三、数组

代码如下:

import numpy as np
name = ['孙一','刘二','张三','李四','王五',]
height = np.array([175,162,158,173,167])
weight = np.array([55,60,63,80,82])
BMI = np.round((weight/(height/100)**2),2)       # 同时,保留2位小数
# print(BMI)
for i in range(len(name)):
    if 18.5 > BMI[i]:
        print(f'{name[i]}:BMI是{BMI[i]},偏瘦。')
    elif 18.5 <= BMI[i] <= 23.9:
        print(f'{name[i]}:BMI是{BMI[i]},标准!')
    else:
        print(f'{name[i]}:BMI是{BMI[i]},肥胖。')

运行代码结果:和上面方法结果相同。

看了以上两个例子,是不是感觉,更复杂了。其实它们的区别在于:

        # 列表只是一种数据的存储容器,它不具有任何计算能力。
        # 数组是一种高级容器,可以高效运算。

        下面我们来见证一下数组的高效。

四、实力PK

        下面我们构造一下海量数据来验证一下数组的高效性。有1千万个人的身高和体重,用两种方法来计算BMI,并记录它们运行的时间。

import random
import time
import numpy as np

h = []
w = []
for i in range(10000000):
    h.append(random.randint(150,190))
    w.append(random.uniform(45,120))
start1 = time.time()
bmi = []
for i in range(10000000):
    bmi.append(w[i]/(h[i]/100)**2)
end1 = time.time()
# print(bmi[:5])
print(end1-start1)          # 计算循环运行时间

start2 = time.time()
H = np.array(h)
W = np.array(w)
BMI = W/(H/100)**2
# print(BMI[:5])
end2 = time.time()
print(end2-start2)            # 计算数组运行时间

运行结果如下: 速度提高了3.5倍

09cac1ae56e84c3b8cde70c56da47af4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值