当前位置: 首页 > news >正文

[黑马程序员Pandas教程]——Pandas数据结构

目录:

  1. 学习目标
  2. 认识Pandas中的数据结构和数据类型
  3. Series对象
  4. 通过numpy.ndarray数组来创建
  5. 通过list列表来创建
  6. 使用字典或元组创建s对象
  7. 在notebook中不写print
  8. Series对象常用API
  9. 布尔值列表获取Series对象中部分数据
  10. Series对象的运算
  11. DataFrame对象
  12. 创建df对象
  13. DataFrame对象常用API
  14. 布尔值列表获取df对象中部分数据
  15. 根据df对象的判断表达式返回自定义的值
  16. df对象的运算
  17. Pandas的数据类型初识
  18. 总结
  19. 项目地址

1.学习目标

  • 知道什么是DataFrame对象、什么是Seires对象

  • 对Series和DataFrame的常用API有印象、能找到、能看懂

  • 了解Pandas中常用数据类型

  • 知道Series以及DataFrame的运算规则

2.认识Pandas中的数据结构和数据类型

上图为上一节中读取并展示出来的数据,以此为例我们来讲解Pandas的核心概念,以及这些概念的层级关系:

  • DataFrame

    • Series

      • 索引列

        • 索引名、索引值

        • 索引下标、行号

      • 数据列

        • 列名

        • 列值,具体的数据

其中最核心的就是Pandas中的两个数据结构:DataFrame和Series

3.Series对象

  • Series也是Pandas中的最基本的数据结构对象,下文中简称s对象;是DataFrame的列对象或者行对象,series本身也具有索引。

  • Series是一种类似于一维数组的对象,由下面两个部分组成:

    • values:一组数据(numpy.ndarray类型)

    • index:相关的数据索引标签;如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。

4.通过numpy.ndarray数组来创建

​​​​​​​

import numpy as np
import pandas as pd# 自动生成索引
# 创建numpy.ndarray对象
# array([1, 2, 3])
# print打印输出 [1 2 3]
# type()为<class 'numpy.ndarray'>
n1 = np.array([1, 2, 3])
print(n1)
print(type(n1))# 创建Series对象
# type()为<class 'pandas.core.series.Series'>
s1 = pd.Series(n1)
print(s1)
print(type(s1))# 创建Series对象,同时指定索引
# type()为<class 'pandas.core.series.Series'>
s1 = pd.Series(n1, index=['A', 'B', 'C'])
print(s1)
print(type(s1))

5.通过list列表来创建

import pandas as pd# 使用默认自增索引
s2 = pd.Series([1, 2, 3])
print(s2)
# 自定义索引
s3 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
print(s3)

6.使用字典或元组创建s对象

import pandas as pd# 使用元组
tst = (1, 2, 3, 4, 5, 6)
s1 = pd.Series(tst)
print(s1)
print(type(s1))# 使用字典:
dst = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6}
s2 = pd.Series(dst)
print(s2)
print(type(s2))

7.在notebook中不写print

  • 在JupyterNotebook中,默认只会打印输出最后出现的变量名;许多时候我们要写大量的print;通过下面的2行代码即可解决这个问题
import pandas as pd# 在notebook执行代码之前首先需要先执行下面代码以设置InteractiveShell.ast_node_interactivity参数
from IPython.core.interactiveshell import InteractiveShellInteractiveShell.ast_node_interactivity = 'all'
# 这个方法的作用范围仅限当前kernel(一个.ipynb文件对应一个kernel)
# 可以让我们在jupyternotebook中不用写print# 使用默认自增索引
s2 = pd.Series([1, 2, 3])
s2
# 自定义索引
s3 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
s3

 8.Series对象常用API

import pandas as pd# 构造一个Series对象
s4 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])
print(s4)# Series对象常用属性和方法# s对象有多少个值,int
print(len(s4))
print(s4.size)# s对象有多少个值,单一元素构成的元组 (6,)
print(s4.shape)# 查看s对象中数据的类型
print(s4.dtypes)# s对象转换为list列表
print(s4.to_list())# s对象的值 array([0, 1, 2, 3, 4, 5], dtype=int64)
print(s4.values)# s对象的值转换为列表
print(s4.values.tolist())# s对象可以遍历,返回每一个值
for i in s4:print(i)# 下标获取具体值
print(s4[1])# 返回前2个值,默认返回前5个
print(s4.head(2))# 返回最后1个值,默认返回后5个
print(s4.tail(1))# 获取s对象的索引 Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
print(s4.index)# s对象的索引转换为列表
print(s4.index.to_list())# s对象中数据的基础统计信息
print(s4.describe())# 返回结果及说明如下
# count    6.000000 # s对象一共有多少个值
# mean     2.500000 # s对象所有值的算术平均值
# std      1.870829 # s对象所有值的标准偏差
# min      0.000000 # s对象所有值的最小值
# 25%      1.250000 # 四分位 1/4位点值
# 50%      2.500000 # 四分位 1/2位点值
# 75%      3.750000 # 四分位 3/4位点值
# max      5.000000 # s对象所有值的最大值
# dtype: float64
# 标准偏差是一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。
# 四分位数(Quartile)也称四分位点,是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。# seriest对象转换为df对象
df = pd.DataFrame(s4)
print(df)
print(type(df))

9.布尔值列表获取Series对象中部分数据

import pandas as pds4 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])# 构造布尔值构成的列表,元素数量和s对象的值数量相同
bool_list = [True]*3 + [False]*3
print(bool_list)# Series[[True, False, ...]]
print(s4[bool_list])
print(s4[[True, True, True, False, False, False]])

10.Series对象的运算

  • Series和数值型变量计算时,变量会与Series中的每个元素逐一进行计算

  • 两个Series之间计算,索引值相同的元素之间会进行计算;索引不同的元素最终计算的结果会填充成缺失值,用NaN表示

import pandas as pds4 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])# Series和数值型变量计算
print(s4 * 5)# 索引完全相同的两个Series对象进行计算
print(s4)
# 构造与s4索引相同的s对象
s5 = pd.Series([10] * 6, index=[i for i in 'ABCDEF'])
print(s5)
# 两个索引相同的s对象进行运算
print(s4 + s5)# 索引不同的两个s对象运算
print(s4)
# 注意s6的最后一个索引值和s4的最后一个索引值不同
s6 = pd.Series([10]*6, index=[i for i in 'ABCDEG'])
print(s6)
print(s4 + s6)

11.DataFrame对象

  • DataFrame是一个表格型的数据结构,它含有一组或多组有序的列(Series),每列可以是不同的值类型(数值、字符串、布尔值等)。
  • DataFrame是Pandas中的最基本的数据结构对象,简称df;可以认为df就是一个二维数据表,这个表有行有列有索引

  • DataFrame是Pandas中最基本的数据结构,Series数据对象的许多属性和方法在DataFrame中也一样适用

12.创建df对象 

DataFrame的创建有很多种方式

  • Serires对象转换为df:上一小节中学习了s.to_frame()以及s.reset_index()

  • 读取文件数据返回df:在之前的学习中我们使用了pd.read_csv('csv格式数据文件路径')的方式获取了df对象

  • 使用字典、列表、元组创建df:接下来就展示如何使用字段、列表、元组创建df

import pandas as pd# 使用字典加列表创建df,使默认自增索引
df1_data = {'日期': ['2021-08-21', '2021-08-22', '2021-08-23'],'温度': [25, 26, 50],'湿度': [81, 50, 56]
}
df1 = pd.DataFrame(data=df1_data)
print(df1)
print(type(df1))# 使用列表加元组创建df,并自定义索引
df2_data = [('2021-08-21', 25, 81),('2021-08-22', 26, 50),('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(data=df2_data,columns=['日期', '温度', '湿度'],index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)
print(df2)
print(type(df2))

 13.DataFrame对象常用API

import pandas as pd# 使用列表加元组创建df,并自定义索引
df2_data = [('2021-08-21', 25, 81),('2021-08-22', 26, 50),('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(data=df2_data,columns=['日期', '温度', '湿度'],index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)# 返回df的行数
print(len(df2))# df中数据的个数
print(df2.size)# df中的行数和列数,元组 (行数, 列数)
print(df2.shape)# 返回列名和该列数据的类型
print(df2.dtypes)# 返回nparray类型的2维数组,每一行数据作为一维数组,所有行数据的数组再构成一个二维数组
print(df2.values)# 返回df的所有列名
print(df2.columns)# df遍历返回的只是列名
for col_name in df2:print(col_name)# 返回df的索引对象
print(df2.index)# 返回第一行数据,默认前5行
print(df2.head(1))# 返回倒数第1行数据,默认倒数5行
print(df2.tail(1))# 返回df的基本信息:索引情况,以及各列的名称、数据数量、数据类型
# series对象没有info()方法
print(df2.info())# 返回df对象中所有数字类型数据的基础统计信息
# 返回对象的内容和Series.describe()相同
print(df2.describe())# 返回df对象中全部列数据的基础统计信息
print(df2.describe(include='all'))

14.布尔值列表获取df对象中部分数据

import pandas as pd# 使用列表加元组创建df,并自定义索引
df2_data = [('2021-08-21', 25, 81),('2021-08-22', 26, 50),('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(data=df2_data,columns=['日期', '温度', '湿度'],index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)print(df2[[True, False, True]])

15.根据df对象的判断表达式返回自定义的值

import pandas as pd# 使用列表加元组创建df,并自定义索引
df2_data = [('2021-08-21', 25, 81),('2021-08-22', 26, 50),('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(data=df2_data,columns=['日期', '温度', '湿度'],index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)print(df2.index != 'row_2')
print(df2[df2.index != 'row_2'])

16.df对象的运算

  • 当DataFrame和数值进行运算时,DataFrame中的每一个元素会分别和数值进行运算,但df中的数据存在非数值类型时不能做加减除法运算

  • 两个DataFrame之间、以及df和s对象进行计算,和2个series计算一样,会根据索引的值进行对应计算:当两个对象的索引值不能对应时,不匹配的会返回NaN

import pandas as pddf1_data = {'日期': ['2021-08-21', '2021-08-22', '2021-08-23'],'温度': [25, 26, 50],'湿度': [81, 50, 56]
}
df1 = pd.DataFrame(data=df1_data)
print(df1)# 使用列表加元组创建df,并自定义索引
df2_data = [('2021-08-21', 25, 81),('2021-08-22', 26, 50),('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(data=df2_data,columns=['日期', '温度', '湿度'],index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)
print(df2)# 不报错
print(df2 * 2)
# 报错,因为df2中有str类型(Object)的数据列
# print(df2 + 1)# df和df进行运算
# 索引完全不匹配
print(df1 + df2)# 构造部分索引和df2相同的新df
df3 = df2[df2.index!='row_3']
print(df3)# 部分索引相同
print(df2 + df3)

17.Pandas的数据类型初识

  • df或s对象中具体每一个值的数据类型有很多,如下表所示

Pandas数据类型说明对应的Python类型
Object字符串类型string
int整数类型int
float浮点数类型float
datetime日期时间类型datetime包中的datetime类型
timedelta时间差类型datetime包中的timedelta类型
category分类类型无原生类型,可以自定义
bool布尔类型True,False
nan空值类型None
  • 可以通过下列API查看s对象或df对象中数据的类型

s1.dtypes
df1.dtypes
df1.info() # s对象没有info()方法
  • `int64`后边的64表示所占字节数

18.总结

  • 理解类知识点

    • dataframe和series对象是什么:

      • 可以认为df是有行有列有索引的二维数据表

      • df和s是Pandas中最核心的数据结构

      • df中每一列或者每一行都是s对象

      • s对象也有索引

      • 每一个s对象都有各自的数据类型,表示构成这个s对象中的值的type;常用的数据类型有

        • Object -- 字符串

        • int -- 整数

        • float -- 小数

​​​​​​​

series和dataframe的API

# <s/df>表示s对象或df对象
<s/df>.size # 返回数据个数
<s/df>.shape # s返回(行数,),df返回(行数,列数)
<s/df>.dtypes # s返回数据类型,df返回列名和该列数据的类型
<s/df>.values # 返回全部值
<s/df>.index # 查看索引
<s/df>.head() # s返回前5个数据,df返回前5行数据
<s/df>.tail() # s返回后5个数据,df返回后5行数据
df.info() # 返回df的基本信息:索引情况,以及各列的名称、数据数量、数据类型;s对象没有这个函数
<s/df>.describe() # 返回s或df对象中所有数值类型数据的基础统计信息
df.describe(include='all') # 返回df对象中全部列数据的基础统计信息

series以及dataframe的运算

  • 当s或df和数值进行运算时,每一个具体的值会分别和数值进行运算,但s或df中的数据存在非数值类型时不能做加减除法运算
  • 两个s之间、两个df之间,以及df和s对象进行计算,会根据索引的值进行对应计算,当两个对象的索引值不能对应时,不匹配的会返回NaN

判断表达式

  • s对象的判断表达式返回由布尔值构成的numpy.ndarray数组

    • s > 0 ==> array([True, False, True])

    • df.index!='row_2' ==> array([True, False, True])

  • 布尔值列表或数组获取s或df对象中部分数据的方法:返回True对应的(行)数据

    • s[[True, True, True, False, False, False]] or s[s>0]

    • df[[True, True, True, False, False, False]] or df[df.index!='xxx']

19.项目地址

Python: 66666666666666 - Gitee.com

相关文章:

[黑马程序员Pandas教程]——Pandas数据结构

目录&#xff1a; 学习目标认识Pandas中的数据结构和数据类型Series对象通过numpy.ndarray数组来创建通过list列表来创建使用字典或元组创建s对象在notebook中不写printSeries对象常用API布尔值列表获取Series对象中部分数据Series对象的运算DataFrame对象创建df对象DataFrame…...

AI 绘画 | Stable Diffusion 提示词

Prompts提示词简介 在Stable Diffusion中&#xff0c;Prompts是控制模型生成图像的关键输入参数。它们是一种文本提示&#xff0c;告诉模型应该生成什么样的图像。 Prompts可以是任何文本输入&#xff0c;包括描述图像的文本&#xff0c;如“一只橘色的短毛猫&#xff0c;坐在…...

tomcat默认最大线程数、等待队列长度、连接超时时间

tomcat默认最大线程数、等待队列长度、连接超时时间 tomcat的默认最大线程数是200&#xff0c;默认核心线程数(最小空闲线程数)是10。 在核心线程数满了之后&#xff0c;会直接启用最大线程数&#xff08;和JDK线程池不一样&#xff0c;JDK线程池先使用工作队列再使用最大线程…...

本地部署 CogVLM

本地部署 CogVLM CogVLM 是什么CogVLM Github 地址部署 CogVLM启动 CogVLM CogVLM 是什么 CogVLM 是一个强大的开源视觉语言模型&#xff08;VLM&#xff09;。CogVLM-17B 拥有 100 亿视觉参数和 70 亿语言参数。 CogVLM-17B 在 10 个经典跨模态基准测试上取得了 SOTA 性能&am…...

bff层解决了什么痛点

bff层 -- 服务于前端的后端 什么是bff&#xff1f; Backend For Frontend&#xff08;服务于前端的后端&#xff09;&#xff0c;也就是服务器设计API的时候会考虑前端的使用&#xff0c;并在服务端直接进行业务逻辑的处理&#xff0c;又称为用户体验适配器。BFF只是一种逻辑…...

面试经典150题——Day33

文章目录 一、题目二、题解 一、题目 76. Minimum Window Substring Given two strings s and t of lengths m and n respectively, return the minimum window substring of s such that every character in t (including duplicates) is included in the window. If there …...

再谈Android重要组件——Handler(Native篇)

前言 最近工作比较忙&#xff0c;没怎么记录东西了。Android的Handler重要性不必赘述&#xff0c;之前也写过几篇关于hanlder的文章了&#xff1a; Handler有多深&#xff1f;连环二十七问Android多线程&#xff1a;深入分析 Handler机制源码&#xff08;二&#xff09; And…...

Javaweb之javascript的详细解析

JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过代码/js效果演示提供资料进行效果演示&…...

Linux常用命令——cd命令

在线Linux命令查询工具 cd 切换用户当前工作目录 补充说明 cd命令用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略&#xff0c;则变换至使用者的home directory(也就是刚login时所在的目录)。另外&#xff0c;~也表示为home directo…...

VHDL基础知识笔记(1)

1.实体&#xff1a;其电路意义相当于器件&#xff0c;它相当于电路原理图上的元器件符号。它给出了器件的输入输出引脚。实体又被称为模块。 2.结构体&#xff1a;这个部分会给出实体&#xff08;或者说模块&#xff09;的具体实现&#xff0c;指定输入和输出的行为。结构体的…...

volatile-日常使用场景

6.4 如何正确使用volatile 单一赋值可以&#xff0c;但是含复合运算赋值不可以&#xff08;i之类的&#xff09; volatile int a 10; volatile boolean flag true; 状态标志&#xff0c;判断业务是否结束 作为一个布尔状态标志&#xff0c;用于指示发生了一个重要的一次…...

策略模式在数据接收和发送场景的应用

在本篇文章中&#xff0c;我们介绍了策略模式&#xff0c;并在数据接收和发送场景中使用了策略模式。 背景 在最近项目中&#xff0c;需要与外部系统进行数据交互&#xff0c;刚开始交互的系统较为单一&#xff0c;刚开始设计方案时打算使用了if else 进行判断&#xff1a; if(…...

学习LevelDB架构的检索技术

目录 一、LevelDB介绍 二、LevelDB优化检索系统关键点分析 三、读写分离设计和内存数据管理 &#xff08;一&#xff09;内存数据管理 跳表代替B树 内存数据分为两块&#xff1a;MemTable&#xff08;可读可写&#xff09; Immutable MemTable&#xff08;只读&#xff0…...

Docker Swarm实现容器的复制均衡及动态管理:详细过程版

Swarm简介 Swarm是一套较为简单的工具&#xff0c;用以管理Docker集群&#xff0c;使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口&#xff0c;换言之&#xff0c;各种形式的Docker Client(dockerclient in go, docker_py…...

Proteus仿真--1602LCD显示仿手机键盘按键字符(仿真文件+程序)

本文主要介绍基于51单片机的1602LCD显示仿手机键盘按键字符&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 其中左下角12个按键模拟仿真手机键盘&#xff0c;使用方法同手机键一样&#xff0c;长按自动跳动切换键值&#xff0c;松手后确认选择&#xff…...

Rust语言和curl库编写程序

这是一个使用Rust语言和curl库编写的爬虫程序&#xff0c;用于爬取视频。 use std::env; use std::net::TcpStream; use std::io::{BufReader, BufWriter}; ​ fn main() {// 获取命令行参数let args: Vec<String> env::args().collect();let proxy_host args[1].clon…...

FSDiffReg:心脏图像的特征和分数扩散引导无监督形变图像配准

论文标题&#xff1a; FSDiffReg: Feature-wise and Score-wise Diffusion-guided Unsupervised Deformable Image Registration for Cardiac Images 翻译&#xff1a; FSDiffReg&#xff1a;心脏图像的特征和分数扩散引导无监督形变图像配准 摘要 无监督可变形图像配准是医学…...

音视频技术开发周刊 | 318

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 日程揭晓&#xff01;速览深圳站大会专题议程详解 LiveVideoStackCon 2023 音视频技术大会深圳站&#xff0c;保持着往届强大的讲师阵容以及高水准的演讲质量。两天的参会…...

asp.net docker-compose添加sql server

打开docker-compose.yml 添加 sqldata:image: mysql:8.1.0 打开docker-compose.override.yml 添加 sqldata:environment:- MYSQL_ROOT_PASSWORDPasswordports:- "8080:8080"volumes:- killsb-one-sqldata:/etc/mysql/conf.d 在docker里面就有了sql server容器镜像…...

uniapp 微信小程序 uni-file-picker上传图片报错 chooseAndUploadFile

这个问题真的很搞&#xff0c; 原因是微信开发者工具更新了&#xff0c;导致图片上传问题。 解决方法&#xff1a; 将微信开发者工具的基础库改为2.33.0一下即可。 在微信开发者工具详情 - 本地设置中&#xff08;记得点击‘推送’按钮&#xff09;&#xff1a;...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...