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

news/2025/1/18 3:25:50/

一、引例

        大家对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


http://www.ppmy.cn/news/35192.html

相关文章

Prometheus cadvisor容器监控和node-exporter节点监控

往期文章 Prometheus监控系统 https://blog.csdn.net/qq_39578545/article/details/108754585 Docker之compose介绍 使用一个Dockerfile模板文件可以定义一个单独的应用容器&#xff0c;如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品&#xff0c;Docker Comp…

五分钟带你了解 计算机操作系统——进程与线程(万字详解·图文)

进程线程可以说是操作系统基础&#xff0c;看过很多关于这方面知识的文章都是纯理论讲述&#xff0c;我准备用图解的形式带你学习和掌握进程、线程。文字力求简单明了&#xff0c;对于复杂概念做到一个概念一张图解&#xff0c;在操作系统课程的学习中&#xff0c;很多人对进程…

STM32F407控制微型推拉式电磁铁(通过继电器)

1、继电器 继电器相当于开关&#xff0c;单片机通过io口高低电平的控制来控制继电器的开闭。采用继电器的好处除了能够用低电压控制高电压&#xff08;如32单片机控制220V的电压&#xff09;外&#xff0c;还可以防止电流反冲&#xff0c;弄烧单片机。 本文采用3.3v的电磁铁&am…

基于SpringBoot的校园疫情防控系统设计与实现

1.概述 校园疫情防控系统的开发运用java技术、springboot框架&#xff0c;MIS的总体思想&#xff0c;以及Mysql等技术的支持下共同完成了该系统的开发&#xff0c;实现了校园疫情防控管理的信息化&#xff0c;使用户体验到校园疫情防控管理&#xff0c;管理员管理操作将更加方…

@Autowired和@Resource区别

Autowired和Resource到底有什么区别 Autowired 和 Resource 都是用来实现依赖注入的注解&#xff08;在 Spring/Spring Boot 项目中&#xff09;&#xff0c;但二者却有着 5 点不同&#xff1a; 来源不同&#xff1a;Autowired 来自 Spring 框架&#xff0c;而 Resource 来自…

java 多线程,线程池

java 多线程&#xff0c;线程池 java Java线程池使用和常用参数 多线程问题&#xff1a; 1、java中为什么要使用多线程 使用多线程&#xff0c;可以把一些大任务分解成多个小任务来执行&#xff0c;多个小任务之间互不影像&#xff0c;同时进行&#xff0c;这样&#xff0c;…

STM32学习(九)

IWDG的本质 Independent watchdog&#xff0c;即独立看门狗。 本质是&#xff1a;能产生系统复位信号的计时器。 递减的计数器。时钟由独立的RC振荡器提供&#xff08;不是来自于主时钟HSE或HSI&#xff09;&#xff0c;可在待机或者停止模式下运行。看门狗被激活后&#xff…

小白开发微信小程序00--文章目录

一个小白&#xff0c;一个老牛&#xff0c;空手能不能套白羊&#xff0c;能不能白嫖&#xff1f;我告诉你&#xff0c;一切都so easy&#xff0c;这个系列从0到106&#xff0c;屌到上天&#xff0c;盖过任何一个&#xff0c;试问&#xff0c;网上讲微信小程序开发的&#xff0c…