一、引例
大家对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},肥胖。')
运行代码结果:
在计算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倍