当前位置: 首页 > 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…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

2025季度云服务器排行榜

在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...

CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx

“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

Qt Quick Controls模块功能及架构

Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...