【数据分析(一)】初探 Numpy
目录
- 前言
- 1. 一维 array 的生成
- 2. 一维 array 的基本操作
- 2.1. 查看属性
- 2.2. 花式索引
- 2.3. 条件筛查
- 2.4. 数据统计
- 3. n 维 array 的生成
- 4. n 维 array 的基本操作
- 4.1. 查看属性
- 4.2. 查询和切片
- 4.3. 花式索引
- 4.4. 矩阵
前言
Numpy
是Python
的常用开源数值计算扩展库,用于高效存储和处理大型矩阵。本文主要介绍Numpy
的数组array
的操作及其相关函数的使用。
以下对Numpy
库函数的介绍中,已传入的参数为默认值,并且无返回值的函数不会以赋值形式演示。
1. 一维 array 的生成
array(p_object, dtype)
:引用一个列表或元组,生成类型为dtype
的一维数组arange(start, stop, step)
:生成相当于array(range(start, stop, step))
的整数序列linspace(start, stop, num=50, endpoint=True, retstep=False, dtype='float64')
:生成长度为num
,类型为dtype
,在[start, stop]
上的等差序列;endpoint
表示区间右端是否封闭,retstep=True
时则返回一个元组(array, step)
,即等差数列和步长empty(shape, dtype='float64')
:生成长度为shape
,类型为dtype
,元素的值全为空值的一维数组zeros(shape, dtype='float64')
:生成长度为shape
,类型为dtype
,元素的值全为0
的一维数组ones(shape, dtype='float64')
:生成*长度为shape
,类型为dtype
,元素的值**全为1
的一维数组fill(value)
:将value
转换为原数组的数据类型后,把原数组的元素的值全部填充为value
random.rand(d)
:在区间[0, 1)
生成随机浮点数,返回长度为d
的一维数组random.randn(d)
:生成服从正态分布的随机浮点数,返回长度为d
的一维数组random.randint(low, high, size, dtype='int')
:在区间[low, high)
生成类型为dtype
的随机数,返回长度为size
的一维数组
import numpy as np# 引用创建
l = [1, 2, 3, 4]
a = np.array(l, dtype='float') # [1. 2. 3. 4.]# 整数序列
a = np.arange(1, 10, 2) # [1 3 5 7 9]# 等差数列
a = np.linspace(1, 10, 4) # [ 1. 4. 7. 10.]# 全0填充
a = np.zeros(3, dtype='bool') # [False False False]# 全1填充
a = np.ones(4, dtype='int') # [1 1 1 1]# 任意值填充
a.fill(2.5) # [2 2 2 2]# 随机浮点数
a = np.random.rand(3) # [0.39581995 0.13435102 0.31592101]# 随机正态分布值
a = np.random.randn(3) # [ 1.62916156 0.44159883 -1.85375949]# 随机数
a = np.random.randint(1, 3, 5) # [1 1 2 1 1]
2. 一维 array 的基本操作
2.1. 查看属性
import numpy as np
a = np.array([1, 2, 3, 4])# 查看类型:即元素的数据类型
print(a.dtype) # int32# 查看维度
print(a.ndim) # 1# 查看长度:即元素数目
print(a.size) # 4# 查看尺寸:返回一个元组,值为对应维度的元素数目
print(a.shape) # (4,)# 类型转换
# a = np.array(a, dtype='float64')
a = a.astype('float64') # [1. 2. 3. 4.]
2.2. 花式索引
import numpy as np
a = np.arange(1, 20, 2)
'''[ 1 3 5 7 9 11 13 15 17 19]'''# 索引列表:获取对应索引的元素
print(a[[2, 2, -3, 6, -1]])
'''[ 5 5 15 13 19]'''# 布尔数组:和numpy数组长度相等,获取布尔值为True的对应位置上的元素
print(a[np.array([1, 1, 0, 1, 0, 1, 1, 0, 1, 0], dtype='bool')])
'''[ 1 3 7 11 13 17]'''
2.3. 条件筛查
import numpy as np
a = np.arange(1, 20, 2)
'''[ 1 3 5 7 9 11 13 15 17 19]'''# 对数组中的所有元素做条件判断,并在对应位置返回布尔值
print(a > 10)
'''[False False False False False True True True True True]'''# 以元组形式,返回所有符合条件的元素的索引
print(np.where(a > 10))
'''(array([5, 6, 7, 8, 9], dtype=int64),)'''# 返回所有符合条件的元素的数组
print(a[a > 10])
print(a[np.where(a > 10)])
'''[11 13 15 17 19]'''
2.4. 数据统计
import numpy as np
a = np.array([-5, -2, 3, 1, 4])'''排列'''
# 正序排列
b = np.sort(a) # [-5 -2 1 3 4]# 排列后的元素在原数组中的索引
b = np.argsort(a) # [0 1 3 2 4]'''运算'''
# 应用于所有元素
b = a+1 # [-4 -1 4 2 5]# 应用于对应元素
b = b*a # [20 2 12 2 20]# 绝对值
abs = np.abs(a) # [5 2 3 1 4]# 指数
exp = np.exp(a) # [6.73794700e-03 1.35335283e-01 2.00855369e+01 2.71828183e+00 5.45981500e+01]'''统计'''
# 求和
# s = a.sum()
s = np.sum(a) # 1# 最小值
# m = a.min()
m = np.min(a) # -5# 最大值
# M = a.max()
M = np.max(a) # 4# 均值
# avg = a.mean()
avg = np.mean(a) # 0.2# 中值
#
mid = np.median(a) # 1.0# 累计和(前缀和)
cs = np.cumsum(a) # [-5 -7 -4 -3 1]# 标准差
# std = a.std()
std = np.std(a) # 3.3105890714493698
3. n 维 array 的生成
array(p_object, dtype)
:引用一个由n
个相同长度的列表或元组 构成的元组,生成类型为dtype
的n
维数组empty((*dn), dtype='float64')
:生成尺寸为(d0, d1, ..., dn)
,类型为dtype
,元素的值全为空值的n
维数组zeros((*dn), dtype='float64')
:生成尺寸为(d0, d1, ..., dn)
,类型为dtype
,元素的值全为0
的n
维数组ones((*dn), dtype='float64')
:生成尺寸为(d0, d1, ..., dn)
,类型为dtype
,元素的值全为1
的n
维数组fill(value)
:将value
转换为原数组的数据类型后,把原数组的元素的值全部填充为value
random.rand(*dn)
:在区间[0, 1)
生成随机浮点数,返回尺寸为(d0, d1, ..., dn)
的n
维数组random.randn(*dn)
:生成服从正态分布的随机浮点数,返回尺寸为(d0, d1, ..., dn)
的n
维数组random.randint(low, high, (*dn), dtype='int')
:在区间[low, high)
生成类型为dtype
的随机数,返回尺寸为(d0, d1, ..., dn)
的n
维数组
import numpy as np# 引用创建
a = np.array(([1, 2, 3, 4], (5, 6, 7, 8)))
'''
[[1 2 3 4][5 6 7 8]]
'''# 全0填充
a = np.zeros((2, 4))
'''
[[0. 0. 0. 0.][0. 0. 0. 0.]]
'''# 全1填充
a = np.ones((2, 4))
'''
[[1. 1. 1. 1.][1. 1. 1. 1.]]
'''# 任意值填充
a.fill(False)
'''
[[0. 0. 0. 0.][0. 0. 0. 0.]]
'''# 随机浮点数
a = np.random.rand(2, 2)
'''
[[0.11188812 0.83587679][0.98262527 0.79479766]]
'''# 随机正态分布值
a = np.random.randn(2, 2)
'''
[[-0.79453966 -1.5958028 ][ 0.89898492 -0.9779685 ]]
'''# 随机数
a = np.random.randint(1, 10, (2, 4))
'''
[[9 7 3 9][3 7 4 8]]
'''
4. n 维 array 的基本操作
以二维数组为例。
4.1. 查看属性
import numpy as np
a = np.array(([1, 2, 3, 4], (5, 6, 7, 8)))
'''
[[1 2 3 4][5 6 7 8]]
'''# 查看类型
print(a.dtype) # int32# 查看维度
print(a.ndim) # 2# 查看数目
print(a.size) # 8# 查看尺寸
print(a.shape) # (2, 4)# 对数组所有元素进行运算
a = a+1
'''
[[2 3 4 5][6 7 8 9]]
'''# 两个数组的对应元素进行运算
a = a*(a-1)
'''
[[ 2 6 12 20][30 42 56 72]]
'''
4.2. 查询和切片
import numpy as np
a = np.array(([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]))
'''
[[ 1 2 3 4][ 5 6 7 8][ 9 10 11 12][13 14 15 16]]
'''
print(a)
# 单元查询:对于a[x, y],x是行索引,y是列索引
print(a[1, 0]) # 5# 单行查询
print(a[1]) # [5 6 7 8]# 单列查询
print(a[:, 1]) # [ 2 6 10 14]# 连续区域切片
print(a[1:3, 1:3])
'''
[[ 6 7][10 11]]
'''# 离散区域切片
print(a[1::2, 1::2])
'''
[[ 6 8][14 16]]
'''# 不完全索引:只给出行索引范围时,默认对整行切片
print(a[:3])
'''
[[ 1 2 3 4][ 5 6 7 8][ 9 10 11 12]]
'''
与列表不同的是,Numpy
数组的切片是对原数组的引用,即它们共同指向一处内存空间,这意味元素的修改会同时作用到数组和它的切片上。可以用copy()
方法进行拷贝,申请新的内存。
import numpy as npa = np.array([1, 2, 3, 4])
b = a[1: 3]
b[0] = '0'
print(a) # [1 0 3 4]a = [1, 2, 3, 4]
b = a[1: 3]
b[0] = '0'
print(a) # [1, 2, 3, 4]
4.3. 花式索引
花式索引是对原数组的拷贝而非引用。
import numpy as np
a = np.array(([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]))
'''
[[ 1 2 3 4][ 5 6 7 8][ 9 10 11 12][13 14 15 16]]
'''# 索引列表
print(a[[0, 1, 2, 3], [0, 1, 2, 3]])
'''[ 1 6 11 16]'''# 布尔数组:需要指定列
mask = np.array([0, 1, 0, 1], dtype='bool')
print(a[mask])
'''
[[ 5 6 7 8][13 14 15 16]]
'''
print(a[mask, 1]) # [ 6 14]
print(a[1, mask]) # [6 8]# 配合切片使用花式索引
print(a[1: 3, [0, 3]])
'''
[[ 5 8][ 9 12]]
'''
'''
4.4. 矩阵
import numpy as np
x = np.array([1, 3, 2, 4, 6, 9])
y = np.array([13, 25, 37, 42, 54, 69])# 相关系数矩阵
cov = np.cov(x, y)
'''
[[ 8.56666667 55. ][ 55. 400.8 ]]
'''# 变形
x = x.reshape(2, 3)
'''
[[1 3 2][4 6 9]]
'''
y.shape = (2, 3)
print(y) # 原矩阵发生改变
'''
[[13 25 37][42 54 69]]
'''# 转置
# x_T = x.T
x_T = x.transpose() # 原矩阵不发生改变
'''
[[1 4][3 6][2 9]]
'''# 连接
'''沿行方向,即第一维(默认)'''
# z = np.vstack((x, y))
z = np.concatenate((x, y), axis=0)
'''
[[ 1 3 2][ 4 6 9][13 25 37][42 54 69]]
''''''沿列方向,即第二维'''
# z = np.hstack((x, y))
z = np.concatenate((x, y), axis=1)
'''
[[ 1 3 2 13 25 37][ 4 6 9 42 54 69]]
''''''沿垂直方向,即第三维'''
z = np.array((x, y))
print(z)
'''
[[[ 1 3 2][ 4 6 9]][[13 25 37][42 54 69]]]
'''
z = np.dstack((x, y))
'''
[[[ 1 13][ 3 25][ 2 37]][[ 4 42][ 6 54][ 9 69]]]
'''
相关文章:
【数据分析(一)】初探 Numpy
目录 前言1. 一维 array 的生成2. 一维 array 的基本操作2.1. 查看属性2.2. 花式索引2.3. 条件筛查2.4. 数据统计 3. n 维 array 的生成4. n 维 array 的基本操作4.1. 查看属性4.2. 查询和切片4.3. 花式索引4.4. 矩阵 前言 Numpy是Python的常用开源数值计算扩展库,用…...

国产化ARM平台-飞腾派开发板硬件与系统
国产化ARM平台-飞腾派开发板硬件与系统 一、飞腾E2000处理器 飞腾腾珑E2000系列包括E2000Q、E2000D、E2000S三个系列,芯片集成飞腾自主研发的高能效和低功耗处理器核,E2000Q集成2个FTC664和2个FTC310处理器核,E2000D集成2个FTC310处理器核&…...
[ LeetCode 75 ] 283 移动零(JavaScript)
283 移动零 题目描述解题思路步骤解析时间和空间复杂度代码实现 题目描述 LeetCode 283 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操…...
前端学习汇总
一、打包工具 1.1、vite vite:vite -- 开发环境 热更新_vite 热更新-CSDN博客 1.2、webpack 常用loader:webpack基础---常用loader_webpack 常用loader-CSDN博客 loader:webpack4和webpack5区别1---loader_webpack4与webpack5处理图片的…...

蓝笔科技 | 超凡妈妈赋能计划-【北大生涯规划师特别企划】
12月27日,“超凡妈妈赋能计划-北大生涯规划师特别企划”在广州正式启动,据了解,本次超凡妈妈赋能计划是由广州蓝笔科技信息有限公司牵头发起并主办,中国关心下一代健康体育基金会作为公益支持单位,北京大学作为项目技术…...

【电路笔记 TMS320C6***DSP】C6748 EDMA3配置笔记 寄存器配置+影子通道寄存器+配置示例
目录 参照资料内存映射寄存器分类影子通道寄存器传输中断PaRAM参数SRC、DSTA_B_CNT、CCNTSRC_DST_BIDXSRC_DST_CIDXOPTopt示例 链接传输LINK_BCNTRLD (LinkAddress/BCountReloadParameter)示例代码示例配置:块传输示例配置:矩阵转置示例配置:…...

2025新春烟花代码(二)HTML5实现孔明灯和烟花效果
效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …...

apollo内置eureka dashboard授权登录
要确保访问Eureka Server时要求输入账户和密码,需要确保以下几点: 确保 eurekaSecurityEnabled 配置为 true:这个配置项控制是否启用Eureka的安全认证。如果它被设置为 false,即使配置了用户名和密码,也不会启用安全认…...

后台管理系统全屏功能实现
后台管理系统中有一个比较常见的功能就是全屏显示,以方便用最大的屏幕查看系统,特别是在小屏模式下。 对于 screenfull 而言,浏览器本身已经提供了对用的 API,点击这里即可查看,这个 API 中,主要提供了两个…...

风电叶片市场竞争激烈:开启绿色能源新篇章的巨大潜力
一、引言 面对全球气候变化的严峻挑战,可再生能源的开发与利用已成为各国共识。风电,作为技术最成熟、最具规模化开发条件的可再生能源之一,正以前所未有的速度发展。而风电叶片,作为风电机组的核心部件,其技术创新与…...

【Unity3D日常开发】Unity3D中适用WEBGL打开Window文件对话框打开/上传文件
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 Unity3D发布的WEBGL程序是不支持直接的I/O操…...

C# 或 .NetCore 如何使用 NPOI 导出图片到 Excel 文件
今天在本文中,我们将尝试使用NPOI库将图像插入到 Excel 文件的特定位置。请将以下逻辑添加到您的写作方法中,在 Excel 文件中添加图像(JPEG、PNG),我已经有一个示例 jpeg 文件 - Read-write-excel-npoi.jpg ,我们将尝试…...

Lambda expressions in C++ (C++ 中的 lambda 表达式)
Lambda expressions in C {C 中的 lambda 表达式} 1. Parts of a lambda expression (Lambda 表达式的各个部分)1.2. Parameter list (Optional) References lambda /ˈlm.də/:the 11th letter of the Greek alphabet (希腊语字母表的第 11 个字母)https://learn.m…...

【Rust自学】11.4. 用should_panic检查恐慌
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.4.1. 验证错误处理的情况 测试函数出了验证代码的返回值是否正确,还需要验证代码是否如预期的去处理了发生错误的情况。比…...

高斯函数Gaussian绘制matlab
高斯 约翰卡尔弗里德里希高斯,(德语:Johann Carl Friedrich Gau,英语:Gauss,拉丁语:Carolus Fridericus Gauss)1777年4月30日–1855年2月23日,德国著名数学家、物理学家…...
获取客户端真实IP地址
当处理来自客户端的请求时,尤其是在存在代理服务器的情况下,可能需要考虑多种HTTP请求头,以尽可能准确地获取用户的真实IP地址。以下是考虑了X-Forwarded-For、Proxy-Client-IP、WL-Proxy-Client-IP、HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR的…...
Kotlin学习(一)
1. Kotlin 作用域函数 如果同学们已经在项目中用过 Kotlin 语言,那么一定见过 let 函数!因为每当 Kotlin 检测到某个对象可能为空时,会自动帮我们修改为用 let 函数实现:user.name?.let{ textView.text it }。这里的 let 函数就…...

鸿蒙UI开发——日历选择器
1、概 述 在项目开发中,我们时常会用到日历选择器,效果如下: ArkUI已经为我们提供了组件,我们可以直接使用,下面针对日历组件做简单介绍。 2、CalendarPickerDialog 接口定义如下: // 定义日历选择器弹…...

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉
文章目录 1. 导入QXlsx库2. 使用 QXlsx库 读取 .xlsx 文件小结 网上有很多教程,但太费劲了,这里有个非常简便的好方法,分享给大家。 1. 导入QXlsx库 转载链接 :https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md…...

React中createRoot函数原理解读——Element对象与Fiber对象、FiberRootNode与HostRootNode
【2024最新版】React18 核心源码分析教程(全61集) Element对象与Fiber对象 在 React 中,Element 对象 和 Fiber 对象 是核心概念,用于实现 React 的高效渲染和更新机制。以下是它们的详细解读: 1. Element 对象 定…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...