【数据分析(一)】初探 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 对象 定…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...