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

【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

目录

1  NumPy 基础概述

1.1 NumPy的主要特点和功能

1.2 NumPy 安装和导入

2 Numpy 数组

2.1 创建NumPy数组

2.2 数组的形状和维度

2.3 数组的数据类型

2.4 访问和修改数组元素

3 数组操作

3.1 数组运算

3.2 数学函数

3.3 统计函数

4 数组形状操作

4.1 重塑数组形状

4.2 数组的转置

4.3 数组展平

4.4 改变数组的大小

4.5 堆叠数组

4.6 拆分数组


1  NumPy 基础概述

        NumPy(Numerical Python)是Python中用于数值计算的核心库之一。它提供了多维数组对象(称为ndarray),以及用于在这些数组上执行各种数学、逻辑、统计和线性代数操作的函数。NumPy是数据科学、机器学习、科学计算和工程领域的重要工具,它的设计目标是提供高性能、灵活性和易用性的数值计算工具。

1.1 NumPy的主要特点和功能

  1. 多维数组对象(ndarray):NumPy的核心数据结构是ndarray,这是一个类似于列表的多维数组,但具有以下特点:

    • 所有元素必须是相同数据类型。
    • 数组的形状可以是任意的,可以是一维、二维、三维等。
    • 数组的元素可以通过索引和切片访问。
  2. 高性能计算:NumPy的数组操作在底层是使用高度优化的C语言实现的,因此能够以非常高效的方式执行数值计算。这使得NumPy成为处理大规模数据集的首选工具。

  3. 广泛的数学函数:NumPy提供了丰富的数学函数,包括基本的算术操作、三角函数、指数和对数、统计函数、线性代数函数等。

  4. 随机数生成:NumPy包含随机数生成器,用于生成随机数和随机数组。这对于模拟和随机实验非常有用。

  5. 广播功能:NumPy允许您在不同形状的数组之间进行操作,通过广播功能,使得这些操作能够自动适应不同形状的数组,而无需显式编写循环。

  6. 文件输入输出:NumPy支持多种文件格式的读写,包括文本文件、二进制文件和NumPy的自定义二进制格式。

  7. 线性代数运算:NumPy提供了一组丰富的线性代数函数,如矩阵乘法、逆矩阵、特征值分解、奇异值分解等。

  8. 数据分析和科学计算:NumPy通常与其他库(如Pandas、SciPy和Matplotlib)一起使用,以进行数据分析、科学计算、数据可视化等任务。

  9. 开源和社区支持:NumPy是开源项目,拥有庞大的用户和开发者社区,因此您可以轻松获得文档、教程和支持。

        总之,NumPy是Python中不可或缺的库,它为数值计算提供了强大的工具,使得在Python中进行科学计算和数据分析变得更加方便和高效。如果您在数据科学、工程或科学研究方面工作,学习和掌握NumPy是非常重要的一步。您可以通过安装NumPy并查阅其官方文档来开始使用它。

 Numpy 官方手册:NumPy user guide — NumPy v1.25 Manualicon-default.png?t=N7T8https://numpy.org/doc/stable/user/index.html#user

1.2 NumPy 安装和导入

在使用NumPy之前,需要先安装它。您可以使用以下命令通过pip安装NumPy:

(1)用conda安装:

# Best practice, use an environment rather than install in the base env
conda create -n my-env
conda activate my-env
# If you want to install from conda-forge
conda config --env --add channels conda-forge
# The actual install command
conda install numpy

(2)用pip安装:

pip install numpy

安装完成后,您可以在Python中导入NumPy:

import numpy as np

        通常,人们将NumPy导入为np,以简化代码中的引用。 现在,您已经准备好开始使用NumPy进行数值计算了。

2 Numpy 数组

2.1 创建NumPy数组

使用np.array()函数可以从Python列表或元组创建NumPy数组:

# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

2.2 数组的形状和维度

NumPy数组具有形状(shape)和维度(dimension),可以使用以下属性获取:

shape = arr.shape  # 形状,返回 (5,) 表示一维数组
dim = arr.ndim    # 维度,返回 1 表示一维数组

2.3 数组的数据类型

每个NumPy数组都有一个数据类型,可以使用dtype属性查看:

dtype = arr.dtype  # 返回数组的数据类型,如int64

2.4 访问和修改数组元素

您可以使用索引和切片来访问和修改数组的元素

element = arr[2]       # 获取索引为2的元素,值为3
sub_array = arr[1:4]   # 获取索引1到3的元素,结果为[2, 3, 4]
arr[0] = 10            # 修改索引0的元素为10

3 数组操作

3.1 数组运算

        NumPy支持对数组执行各种数学运算,例如加法、减法、乘法和除法。这些运算是按元素执行的:

import numpy as nparr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])# 加法
result_addition = arr1 + arr2  # [5, 7, 9]# 减法
result_subtraction = arr1 - arr2  # [-3, -3, -3]# 乘法
result_multiplication = arr1 * arr2  # [4, 10, 18]# 除法
result_division = arr1 / arr2  # [0.25, 0.4, 0.5]

3.2 数学函数

NumPy提供了丰富的数学函数,您可以对整个数组或数组的元素进行操作。以下是一些示例:

import numpy as np# 数组用于演示数学函数的功能
arr = np.array([0, 1, 2, 3, 4, 5])# 计算指数函数
exp_values = np.exp(arr)
# exp_values 现在包含了arr中每个元素的e的幂次方结果# 计算自然对数函数(对数的逆函数)
log_values = np.log(arr + 1)
# 这里使用(arr + 1)来避免对0进行对数运算,因为对数函数不定义于0# 计算平方根
sqrt_values = np.sqrt(arr)
# sqrt_values 现在包含了arr中每个元素的平方根# 计算正弦函数
sin_values = np.sin(arr)
# sin_values 包含arr中每个元素的正弦值# 计算余弦函数
cos_values = np.cos(arr)
# cos_values 包含arr中每个元素的余弦值# 计算反正弦函数
asin_values = np.arcsin(arr / 5)
# asin_values 包含arr中每个元素的反正弦值# 计算反余弦函数
acos_values = np.arccos(arr / 5)
# acos_values 包含arr中每个元素的反余弦值# 计算四舍五入的整数值
round_values = np.round(arr / 2)
# round_values 包含arr中每个元素除以2并四舍五入后的整数值

具体示例:

import numpy as np# 求绝对值
absolute_value = np.abs([-1, -2, 3])  # [1 2 3]# 计算平方根
sqrt_value = np.sqrt([4, 9, 16])  # [2. 3. 4.]# 计算指数函数
exp_value = np.exp([1, 2, 3])  # [ 2.71828183  7.3890561  20.08553692]# 计算自然对数
log_value = np.log([1, 10, 100])  # [0. 2.30258509 4.60517019]# 计算以2为底的对数
log2_value = np.log2([1, 2, 4])  # [0. 1. 2.]# 计算以10为底的对数
log10_value = np.log10([1, 10, 100])  # [0. 1. 2.]# 计算幂函数
power_value = np.power([2, 3, 4], [2, 3, 2])  # [ 4 27 16]# 计算三角函数
sin_value = np.sin(np.pi / 2)  # 1.0
cos_value = np.cos(np.pi)  # -1.0# 计算反三角函数
arcsin_value = np.arcsin(1)  # 1.5707963267948966
arccos_value = np.arccos(0)  # 1.5707963267948966# 计算正切函数
tan_value = np.tan(np.pi / 4)  # 0.9999999999999999# 计算反正切函数
arctan_value = np.arctan(1)  # 0.7853981633974483# 计算双曲正弦函数
sinh_value = np.sinh(1)  # 1.1752011936438014# 计算双曲余弦函数
cosh_value = np.cosh(1)  # 1.5430806348152437# 计算双曲正切函数
tanh_value = np.tanh(1)  # 0.7615941559557649# 计算双曲反正弦函数
arcsinh_value = np.arcsinh(1)  # 0.881373587019543# 计算双曲反余弦函数
arccosh_value = np.arccosh(2)  # 1.3169578969248166# 计算双曲反正切函数
arctanh_value = np.arctanh(0.5)  # 0.5493061443340548# 计算四舍五入
round_value = np.round([1.2, 2.7, 3.5])  # [1. 3. 4.]# 计算向上取整
ceil_value = np.ceil([1.2, 2.7, 3.5])  # [2. 3. 4.]# 计算向下取整
floor_value = np.floor([1.2, 2.7, 3.5])  # [1. 2. 3.]

        以上是一系列NumPy中数学函数的示例,包括绝对值、平方根、指数函数、自然对数、以2为底的对数、以10为底的对数、幂函数、三角函数、反三角函数、双曲函数、反双曲函数、四舍五入、向上取整和向下取整。这些函数允许您执行各种数学运算和变换,对数据进行处理和分析。

3.3 统计函数

        NumPy提供了各种统计函数,可以帮助您分析数组的统计属性,如均值、总和、最大值和最小值等。以下是示例:

import numpy as np# 创建一个示例数组
data = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])# 计算平均值
mean = np.mean(data)  # 平均值为 3.0# 计算中位数
median = np.median(data)  # 中位数为 3.0# 计算众数
from scipy import stats
mode = stats.mode(data)  # 众数为 ModeResult(mode=array([4]), count=array([4]))# 计算标准差
std_deviation = np.std(data)  # 标准差为 1.118033988749895# 计算方差
variance = np.var(data)  # 方差为 1.25# 计算最小值和最大值
min_value = np.min(data)  # 最小值为 1
max_value = np.max(data)  # 最大值为 4# 计算百分位数
percentile_25 = np.percentile(data, 25)  # 25th 百分位数为 2.25
percentile_75 = np.percentile(data, 75)  # 75th 百分位数为 3.75# 计算数据范围
data_range = np.ptp(data)  # 数据范围为 3# 计算数据的四分位距
iqr = np.percentile(data, 75) - np.percentile(data, 25)  # 四分位距为 1.5# 计算数据的和
total_sum = np.sum(data)  # 总和为 30# 计算累积和
cumulative_sum = np.cumsum(data)  # [ 1  3  5  8 11 14 18 22 26 30]# 计算累积积
cumulative_product = np.cumprod(data)  # [     1      2      4     12     36    108    432   1728   6912  27648]# 计算均方根(Root Mean Square)
rms = np.sqrt(np.mean(np.square(data)))  # 均方根为 2.160246899469287# 计算协方差矩阵
data1 = np.array([1, 2, 3, 4, 5])
data2 = np.array([5, 4, 3, 2, 1])
covariance_matrix = np.cov(data1, data2)  # 结果是一个协方差矩阵# 计算相关系数
correlation_coefficient = np.corrcoef(data1, data2)  # 结果是相关系数矩阵

示例演示了如何使用NumPy中的统计函数来计算各种统计量,包括平均值、中位数、众数、标准差、方差、最小值、最大值、百分位数、数据范围、四分位距、总和、累积和、累积积、均方根、协方差矩阵和相关系数。这些函数对于数据分析非常有用。

4 数组形状操作

4.1 重塑数组形状

        重塑数组的形状是常见的操作,特别是在与不同形状的数据进行操作时。使用reshape()函数可以改变数组的形状,但请注意新形状的元素数量必须与原始数组相同。

4.2 数组的转置

        数组的转置操作是将数组的行和列进行交换。您可以使用.T属性来获取数组的转置。

4.3 数组展平

        展平数组意味着将多维数组转换为一维数组。您可以使用ravel()函数或flatten()函数来实现这一目标。

4.4 改变数组的大小

        使用resize()函数可以改变数组的大小,不需要考虑新形状与原始数组的元素数量是否兼容。如果新数组大于原始数组,多余的元素将被填充0。

4.5 堆叠数组

        堆叠数组是将多个数组按垂直或水平方向堆叠在一起。您可以使用vstack()函数垂直堆叠和hstack()函数水平堆叠数组。

4.6 拆分数组

        拆分数组是将一个数组拆分成多个子数组。使用split()函数可以按指定位置拆分数组。

以上示例代码:

import numpy as np# 创建一个示例数组
arr = np.array([[1, 2, 3],[4, 5, 6]])# 1. 重塑数组形状 (reshape)
# 用于改变数组的形状,返回一个新的视图。
reshaped = arr.reshape(3, 2)
# 结果为:
# [[1 2]
#  [3 4]
#  [5 6]]# 2. 数组的转置 (T属性)
# 返回原始数组的转置,即交换行和列。
transposed = arr.T
# 结果为:
# [[1 4]
#  [2 5]
#  [3 6]]# 3. 改变数组的大小 (resize)
# 允许调整数组的大小,可以增加或减少元素的数量。
resized = np.resize(arr, (2, 4))
# 结果为:
# [[1 2 3 4]
#  [5 6 1 2]]# 4. 数组连接 (vstack, hstack)
# vstack用于垂直堆叠多个数组,hstack用于水平堆叠多个数组。
arr1 = np.array([1, 2])
arr2 = np.array([3, 4])
vertical_stack = np.vstack((arr1, arr2))
# 结果为:
# [[1 2]
#  [3 4]]horizontal_stack = np.hstack((arr1, arr2))
# 结果为:
# [1 2 3 4]# 5. 拆分数组 (split)
# 用于将一个数组拆分为多个子数组,可以指定拆分的位置。
split_arr = np.split(arr, 2)
# 在索引2处拆分数组,结果为两个子数组:
# 子数组1: [[1 2 3]]
# 子数组2: [[4 5 6]]# 6. 数组展平 (ravel, flatten)
# ravel和flatten函数用于将多维数组展平为一维数组。
flattened = arr.ravel()
# 结果为一维数组: [1 2 3 4 5 6]# 可以使用flatten()函数进行展平,效果相同:
flattened_using_flatten = arr.flatten()# 7. 更改数组的维度 (ndarray.shape)
# 使用数组的shape属性来直接更改数组的形状。
arr.shape = (3, 2)
# 这会将数组的形状更改为3x2。# 8. 调整数组的大小 (resize)
# resize函数也可用于调整数组的大小,但可以指定refcheck参数以避免数据损失。
resized = np.resize(arr, (2, 4), refcheck=False)
# 结果为:
# [[1 2 3 4]
#  [5 6 1 2]]

        这些数组形状操作在数据预处理、图像处理、机器学习、科学计算等领域都有广泛的应用。它们使得在处理不同形式和维度的数据时更加灵活,并且可以使数据适应不同的算法和任务。

相关文章:

【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

目录 1 NumPy 基础概述 1.1 NumPy的主要特点和功能 1.2 NumPy 安装和导入 2 Numpy 数组 2.1 创建NumPy数组 2.2 数组的形状和维度 2.3 数组的数据类型 2.4 访问和修改数组元素 3 数组操作 3.1 数组运算 3.2 数学函数 3.3 统计函数 4 数组形状操作 4.1 重塑数组形…...

Day01-Java基础语法

目录 1. 人机交互 1.1 什么是cmd? 1.2 如何打开CMD窗口? 1.3 常用CMD命令 1.4 CMD练习 1.5 环境变量 2. Java概述 1.1 Java是什么? 1.2下载和安装 1.2.1 下载 1.2.2 安装 1.2.3 JDK的安装目录介绍 1.3 HelloWorld小案例 2.3.1 …...

代码随想录二刷day06

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣242. 有效的字母异位词二、力扣349. 两个数组的交集三、力扣202. 快乐数四、力扣1两数之和 前言 一、力扣242. 有效的字母异位词 class Solution {pub…...

可扩展的Blender插件开发汇总

成熟的 Blender 3D 插件是令人惊奇的事情。作为 Python 和 Blender 的新手,我经常发现自己被社区中的人们创造的强大的东西弄得目瞪口呆。坦率地说,其中一些包看起来有点神奇,当自我怀疑或冒名顶替综合症的唠叨声音被打破时,很容易想到“如果有人能做出可以做xxx的东西就好…...

2023_Spark_实验二:IDEA安装及配置

一、下载安装包 链接:百度网盘 请输入提取码 所在文件夹:大数据必备工具--》开发工具(前端后端)--》后端 下载文件名称:ideaIU-2019.2.3.exe (喜欢新版本也可安装新版本,新旧版本会存在部分差异) IDEA …...

小赢科技,寻找金融科技核心价

如果说金融是经济的晴雨表,是通过改善供给质量以提高经济质量的切入口,那么金融科技公司,就是这一切行动的推手。上半年,社会经济活跃程度提高背后,金融科技公司既是奉献者,也是受益者。 8月29日&#xff0…...

NAT与代理服务器

1.DNS Domain Name System 是一整套从域名映射到IP的系统(把域名转化为IP地址) 2.域名简介 3.周鸿祎 傅盛 4.ICMP协议 用来网络故障排查原因 草图理解“位置” ping ICMP 是绕过TCP UDP传输协议的,没有端口号 traceroute 5.NAT技术 N…...

24.排序,插入排序,交换排序

目录 一. 插入排序 (1)直接插入排序 (2)折半插入排序 (3)希尔排序 二. 交换排序 (1)冒泡排序 (2)快速排序 排序:将一组杂乱无章的数据按一…...

Navicat16安装教程

注:因版权原因,本文已去除破解相关的文件和内容 1、在本站下载解压后即可获得Navicat16安装包和破解补丁,如图所示 2、双击“navicat160_premium_cs_x64.exe”程序,即可进入安装界面, 3、点击下一步 4、如图所示勾选“…...

【看表情包学Linux】初识文件描述符 | 虚拟文件系统 (VFS) 初探 | 系统传递标记位 | O_TRUNC | O_APPEND

爆笑教程《看表情包学Linux》👈 猛戳订阅!​​​​​ 💭 写在前面:通过上一章节的讲解,想必大家已对文件系统基本的接口有一个简单的了解,本章我们将继续深入讲解,继续学习系统传递标志位&…...

ssm+vue“魅力”繁峙宣传网站源码和论文

ssmvue“魅力”繁峙宣传网站源码和论文102 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身…...

Linux系统编程5(线程概念详解)

线程同进程一样都是OS中非常重要的部分,线程的应用场景非常的广泛,试想我们使用的视频软件,在网络不是很好的情况下,通常会采取下载的方式,现在你很想立即观看,又想下载,于是你点击了下载并且在…...

leetcode645. 错误的集合(java)

错误的集合 题目描述优化空间代码演示 题目描述 难度 - 简单 LC645 - 错误的集合 集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数…...

Pytest参数详解 — 基于命令行模式

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同,可以使用表达式来快速定位,例如: 命令行-k参数.png 3、-m 标记&#xff0…...

【python爬虫】3.爬虫初体验(BeautifulSoup解析)

文章目录 前言BeautifulSoup是什么BeautifulSoup怎么用解析数据提取数据 对象的变化过程总结 前言 上一关,我们学习了HTML基础知识,知道了HTML是一种用来描述网页的语言,又了解了HTML的基本结构。 认识了HTML中的常见标签和常见属性&#x…...

【Three.js + Vue 构建三维地球-Part One】

Three.js Vue 构建三维地球-Part One Vue 初始化部分Vue-cli 安装初始化 Vue 项目调整目录结构 Three.js 简介Three.js 安装与开始使用 实习的第一个任务是完成一个三维地球的首屏搭建,看了很多的案例,也尝试了用 Echarts 3D地球的模型进行构建&#xf…...

Power View

界面 切换可视化效果 对于已经上传到透视表的数据,选择power view,形成表格后。...

SQL查询本年每月的数据

--一、以一行数据的形式,显示本年的12月的数据,本示例以2017年为例,根据统计日期字段判断,计算总和,查询语句如下:selectsum(case when datepart(month,统计日期)1 then 支付金额 else 0 end) as 1月, sum…...

C++之struct和union对比介绍

C之struct和union对比介绍 在C中,struct和union都是用来定义自定义数据类型的关键字,但它们的作用略有不同。 首先了解一下它们的基本概念: struct(结构体):struct 是一个用户自定义的数据类型&#xff…...

微服务--SkayWalking(链路追踪:国产开源框架)

SkayWalking:分布式系统的应用程序性能监视工具 作用:分布式追踪、性能指标分析、应用、服务依赖分析; SkayWalking性能剖析: 我操,能够定位到某一个方法会有多慢。。。 通过Tid查看全局所有的日志信息&#xff08…...

在Windows 10上部署ChatGLM2-6B:掌握信息时代的智能对话

在Windows 10上部署ChatGLM2-6B:掌握信息时代的智能对话 硬件环境ChatGLM2-6B的量化模型最低GPU配置说明准备工作ChatGLM2-6B安装部署ChatGLM2-6B运行模式解决问题总结 随着当代科技的快速发展,我们进入了一个数字化时代,其中信息以前所未有的…...

LRU和LFU算法的简单实现

LRU #include <iostream> #include <unordered_map> #include <list> struct Node{int key;int value;Node(int key, int value):key(key),value(value){} }; class LruCache{ private:int maxCapacity;// 最大容量std::list<Node>CacheList;// 缓存链…...

OCR多语言识别模型构建资料收集

OCR多语言识别模型构建 构建多语言识别模型方案 合合&#xff0c;百度&#xff0c;腾讯&#xff0c;阿里这四家的不错 调研多家&#xff0c;发现有两种方案&#xff0c;但是大多数厂商都是将多语言放在一个字典里&#xff0c;构建1w~2W的字典&#xff0c;训练一个可识别多种语…...

倍增的经典题目:扩大区间、st表

1. 扩大区间 P4155 [SCOI2015] 国旗计划例题1&#xff1a;P4155 [SCOI2015] 国旗计划 计算能覆盖整个圆圈的最少区间&#xff0c;题目给定的所有区间互相不包含&#xff0c;按区间左端点排序后&#xff0c;区间的右端点也是单增的。 我们首先需要化圆为线&#xff0c;然后贪…...

LeetCode——和为K的子数组(中等)

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k 3 输出&#xff1a;2 题解 …...

Truncation Sampling as Language Model Desmoothing

本文是LLM系列文章&#xff0c;针对《Truncation Sampling as Language Model Desmoothing》的翻译。 截断采样作为语言模型的去平滑性 摘要1 引言2 背景3 截断作为去平滑性4 方法5 实验与结果6 相关工作7 结论8 不足 摘要 来自神经语言模型的长文本样本可能质量较差。截断采…...

docker安装jenkins

运行jenkins docker run -d \--name jenkins \ --hostname jenkins \-u root \-p 29090:8080 \--restart always \-v D:\springcloud\学习\jekins\jenkins\jks_home:/var/jenkins_home \ jenkins/jenkins获取root登录密码 密码在jekins_home/secrets/initalAdminPassword文件…...

学习pytorch8 土堆说卷积操作

土堆说卷积操作 官网debug torch版本只有nn 没有nn.functional代码执行结果 B站小土堆视频学习笔记 官网 https://pytorch.org/docs/stable/nn.html#convolution-layers 常用torch.nn, nn是对nn.functional的封装&#xff0c;使函数更易用。 卷积核从输入图像左上角&#xf…...

pytest自动化测试两种执行环境切换的解决方案

目录 一、痛点分析 方法一&#xff1a;Hook方法pytest_addoption注册命令行参数 1、Hook方法注解 2、使用方法 方法二&#xff1a;使用插件pytest-base-url进行命令行传参 一、痛点分析 在实际企业的项目中&#xff0c;自动化测试的代码往往需要在不同的环境中进行切换&am…...

说说TIME_WAIT和CLOSE_WAIT区别

分析&回答 TCP协议规定&#xff0c;对于已经建立的连接&#xff0c;网络双方要进行四次握手才能成功断开连接&#xff0c;如果缺少了其中某个步骤&#xff0c;将会使连接处于假死状态&#xff0c;连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接&#xf…...