【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]]

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker进阶作业

一、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 安装Docker:确保已在CentOS 7.5上安装了Docker。 拉取MySQL 5.6镜像:使用以下命令从Docker Hub上拉取MySQL 5.6镜像。 docker pull mysql:5.6 运行MySQL容器:使用以下命令…

使用Windbg动态调试排查软件启动不了的问题

目录 1、问题说明 2、初步分析 3、使用Windbg启动程序进行动态调试 4、进一步分析 5、何时使用Windbg静态分析?何时使用Windbg进行动态调试? 6、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&…

Go在安装Gin时出现Failed to connect 报错问题的解决方案(已解决)

在命令行中输入:go get -u github.com/gin-gonic/gin指令安装Gin第三方包时出现连接错误与连接超时的情况如下: 在较新版本的Go中引入了全新的包管理机制,出现上述错误可能是包管理机制设置不恰当的问题,尝试在终端窗口输入如下…

解决Apache Tomcat “Request header is too large“ 异常 ‍

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

python数分实战探索霍尔特法之销售预测python代码实现以及预测图绘制

探索霍尔特法:时间序列预测中的线性趋势捕捉 时间序列分析是统计学和数据分析中的一个核心领域。无论是预测股票市场的走势,还是预测未来的销售量,一个精确和可靠的预测模型都是至关重要的。在众多的时间序列预测方法中,霍尔特法(Holts method)脱颖而出,特别是当我们面…

【数据结构】| 并查集及其优化实现

目录 一. 并查集基本概念处理过程初始化合并查询小结 二. 求并优化2.1 按大小求并2.2 按秩(高度)求并2.3 路径压缩2.4 类的实现代码2.5 复杂度分析 三. 应用LeetCode 128: 最长连续数列LeetCode 547: 省份数量LeetCode 200: 岛屿数量 一. 并查集基本概念 以一个直观的问题来引入…

差分数组/前缀和

文章目录 1094. 拼车1109. 航班预定统计303. 区域和检索 - 数组不可变560. 和为K的子数组523. 连续的子数组的和 1094. 拼车 class Solution {public boolean carPooling(int[][] trips, int capacity) {int[] diff new int[1001]; // 记录每个站点改变的人数,比如…

无涯教程-JavaScript - WEIBULL函数

WEIBULL函数取代了Excel 2010中的WEIBULL.DIST函数。 描述 该函数返回威布尔分布。在可靠性分析中使用此分布,如计算设备的平均故障时间。 语法 WEIBULL(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.Requir…

selenium可以编写自动化测试脚本吗?

Selenium可以用于编写自动化测试脚本,它提供了许多工具和API,可以与浏览器交互,模拟用户操作,检查网页的各个方面。下面是一些步骤,可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先…

SQL Server对象类型(2)——索引(Index)(3)

说完了簇索引,接下来我们再说说非簇索引,与Oracle中的普通B-tree索引类似。SQL Server中的非簇索引,首先,其也是通过一个B-tree结构进行组织和存储,该结构同样分为根节点/数据页(Root Node/Page)、中间节点/数据页(Intermediate Nodes/Pages)和叶子节点/数据页(Leaf …

stable diffusion实践操作-常见lora模型介绍

系列文章目录 本文专门开一节写Lora相关的内容,在看之前,可以同步关注: stable diffusion实践操作 文章目录 系列文章目录前言一、什么是lora?1.1 lora 定义1.2 lora的基本原理1.2 通过分层控制lora 二、作用:2.1 复刻人物特征2…

C++实现蜂群涌现效果(flocking)

Flocking算法0704_元宇宙中的程序员的博客-CSDN博客 每个个体的位置,通过计算与周围个体的速度、角度、位置,去更新位置。

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

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

AI 领域中 SLAM、Planning 和 Perception 的区别和联系

在人工智能(AI)领域,SLAM、Planning 和 Perception 是三个关键的概念,它们在机器人、自主驾驶车辆等领域中扮演着重要的角色。以下是它们之间的区别和联系: SLAM SLAM(Simultaneous Localization and Map…

【多线程】线程间通信及状态

文章目录 1. 线程间的通信1.1 wait和notify1.2 notify随机唤醒1.3 notifyAll()1.4 join() 2. 线程间的状态3. 验证线程的状态3.1 验证NEW、RUNNABLE、TERMINATED3.2 验证WAITING3.3 验证TIMED-WAITING3.4 验证BLOCKED 4. 面试题:wait和sleep对比 1. 线程间的通信 1…

Linux系统下的zabbix监控平台(单机安装服务)

目录 一、zabbix的基本概述 二、zabbix构成 1.server 2.web页面 3.数据库 4.proxy 5.Agent 三、监控对象 四、zabbix的日常术语 1.主机(host) 2.主机组(host group) 3.监控项(item) 4.触发器(trigger) 5.事件(event) 6.动作(a…

正则判断链接是否为外链,自动加上nofollow标签

网站内容通常会有很多外部链接,如果每个都手动修改nofollow标签很麻烦,这里分享给大家这篇利用正则表达式自动判断链接是否为外链,如果是外部链接就自动加上nofollow标签的教程。这样可以很好的优化网站链接,减少网站传递权重,也无需手动添加修改。 function tin_seo_wl(…

el-dialog无法关闭

代码如下&#xff0c;:visible.sync"result2DeptVisible"来控制dialog的隐显问题&#xff0c;但当点击关闭的时候 &#xff0c;无法关闭&#xff01;&#xff01; <el-dialog :visible.sync"result2DeptVisible" class"el-dialog-view">&…

StarRocks入门到熟练

1、部署 1.1、注意事项 需要根据业务需求设计严谨的集群架构&#xff0c;一般来说&#xff0c;需要注意以下几项&#xff1a; 1.1.1、FE数量及高可用 FE的Follower要求为奇数个&#xff0c;且并不建议部署太多&#xff0c;通常我们推荐部署1个或3个Follower。在三个Followe…

JUC并发编程--------CAS、Atomic原子操作

什么是原子操作&#xff1f;如何实现原子操作&#xff1f; 什么是原子性&#xff1f; 事务的一大特性就是原子性&#xff08;事务具有ACID四大特性&#xff09;&#xff0c;一个事务包含多个操作&#xff0c;这些操作要么全部执行&#xff0c;要么全都不执行 并发里的原子性…