NumPy库的学习

news2025/1/31 3:09:32

本文主要记录的是笔者在B站自学Numpy库的学习笔记。

引入numpy库

import numpy as np

矩阵的创建

创建一个二行三列的矩阵。

array = np.array([[1,2,3],
                 [2,3,4]])

查看array的行数、形状、元素数量

print("number of dim:",array.ndim) 
print("shape:",array.shape)
print("size:",array.size)

执行结果:
在这里插入图片描述
其中
ndim显示的是它的行数;
shape显示的是它的形状(2行3列的矩阵);
size显示的是它的元素数量(6个)

创建0矩阵

array = np.zeros((4,5)) #4行5列的0矩阵

执行结果:
在这里插入图片描述

创建全1矩阵

array = np.ones((4, 5),dtype=int)  # 4行5列的全1矩阵并用dtype属性设置成int类型

执行结果:
在这里插入图片描述

创建有步长的一维矩阵

array = np.arange(1,22,3)  # [1,22)步长为3的一维矩阵

执行结果
在这里插入图片描述

用reshape方法创建多维矩阵

array = np.arange(20).reshape((4,5))  # 4行5列0~19的矩阵

执行结果
在这里插入图片描述

创建一维序列线段

array = np.linspace(10,30,6)  # 一行从10到30,6个步长的序列线段

执行结果
在这里插入图片描述

创建多维序列线段

array = np.linspace(10, 30, 6).reshape((3,2))  # 3行2列从10到30,6个步长的序列线段

执行结果
在这里插入图片描述

生成多维随机数矩阵

array = np.random.random((3,5))  # 3行5列从0到1的随机数

我们还可以使用numpy内置的一些方法进行数值计算,比如求和、搜索最大值、走索最小值、按行求和、按列求最小值、按行求最大值等等(axis=1时表示横向,axis=0表示纵向)。

np.sum(array) #将元素求和
np.min(array)  # 将元素求最小值
np.max(array)  # 将元素求最大值
np.sum(array,axis=1)  # 按行求和
np.min(array, axis=0)  # 按列求最小值
np.max(array, axis=1)  # 按行求最大值

执行结果
在这里插入图片描述

矩阵相加

矩阵相加,只需要简单的用+号就可以完成。

a = np.array([4,5,6,7,8])
b = np.arange(5)
c = a+b

执行结果
在这里插入图片描述

矩阵点乘

矩阵点乘指的是矩阵之间对应位置元素相乘。
用刚才的b矩阵点乘自身。

b = b**2

执行结果
在这里插入图片描述

c = np.array([[1,1,1],
             [0,1,2],
             [2,3,4]])
d = np.arange(9).reshape((3,3))
e = c*d #c矩阵和d矩阵进行点乘

运行结果:
在这里插入图片描述

矩阵叉乘

矩阵叉乘就是我们在线性代数里面学的“矩阵乘法”。
叉乘使用的方法是dot()。两种写法:

dot = np.dot(c,d)
dot = c.dot(d) 

执行结果:
在这里插入图片描述

矩阵的元素布尔判断

判断a矩阵里的元素是否比6大

a > 6

执行结果:
在这里插入图片描述

一些常用的运算

例如找最大元素的索引、最小元素索引、计算平均值、计算中位数、计算逐项累加值、计算逐项差值、寻找非0元素下索引、逐行排序、矩阵转置、矩阵自叉乘、按列计算平均值、滤波操作等。

array = np.arange(2, 14).reshape((3, 4))

np.argmax(array)   # 最大值索引
np.argmin(array)  # 最小值索引
array.mean()  # 计算平均值
np.average(array)  # 计算平均值
np.median(array)  # 计算中位数
pnp.cumsum(array)  # 计算逐项累加值
np.diff(array)  # 计算逐项差值
np.nonzero(array)  # 给出非0元素的下标
np.sort(array)  # 逐行排序
np.transpose(array)  # 矩阵的转置
array.transpose()  # 矩阵的转置
array.T  # 矩阵的转置
(array.T).dot(array)  # 矩阵转置后叉乘
np.mean(array, axis=0)  # 按列计算平均值
np.clip(array, 5, 9)  # 滤波,设置小于5的数等于5,大于9的数等于9

运行结果:
在这里插入图片描述
关于非0元素下标,输出的是两个一位数组,分别代表非0元素的x轴位置和y轴位置。

矩阵索引

array = np.arange(0,16).reshape((4,4)) 

array[2]	#获取第二行的所有元素
array[2][1]	#获取第2行第1列的元素
array[2,1]   #也可以这么写
array[:,1]   #第1列所有数
array[1, 1:3]  # 第1行第1列到第3列之前所有数
array.flatten()  #拉平矩阵

运行结果:
在这里插入图片描述

矩阵的合并

a = np.array([1,2,3])
b = np.array([4,5,6])
np.vstack((a, b))  # 上下合并 v:vertical
np.hstack((a, b))  # 左右合并 h:horizontal

运行结果
在这里插入图片描述

一维矩阵的转置

对单行序列不可以通过转置的方式得到单列的序列,直接写a.T是转置不了a的。通过a.shape可以得到:(3,),说明现在只有一个维度,而转置是两个维度的事情。所以可以通过newaxis的方式添加纵向维度来达到转置的目的。

a[:,np.newaxis] #[横向维度,纵向维度]

如果还要转置回来,a.T可不可以达到目的呢?也不可以。通过a.shape还是会得到:(3,),说明此时a还是被看作是一维的数组。再转置回来怎么办?那就通过添加横向纬度来转置!

a[np.newaxis,:]

运行结果:
在这里插入图片描述

矩阵的分割

用split、vsplit、hsplit可以进行等份分割,用array_split可以进行不等份分割

a = np.arange(20).reshape((4, 5))
np.split(a, 5, axis=1)  # 分割后成横向排列,也就是对列进行等分分割,分割成5部分
np.split(a, 2, axis=0)   # 分割后成纵向排列,也就是对行进行等分分割,分割成2部分
#等效写法:
np.vsplit(a, 2)   #等份分割后成纵向
np.hsplit(a, 5)   #等份分割后成横向
#不等分划分
np.array_split(a, 3, axis=1)  #不等份分割成4份后成横向

运行结果:
在这里插入图片描述
“成横向”的意思是分割完毕后每一组是横向摆,同理“成纵向”是分割完毕后每一组是纵向摆。

浅拷贝与深拷贝

假设现在有两个矩阵array1,array2。
浅拷贝的写法是:array2 = array1; 这种写法只是array2对array1的简单引用,也就意味着对array1的属性进行修改时,array2的属性也会跟着变,说白了此时array2就是array1。类似于C语言的地址传递(实参传递)。
深拷贝的写法是:array2 = array1.copy(); 这种写法是将array1的所有属性及参数一并拷贝给array2,但是array2并不对array1进行引用。这也就意味着,array1的属性改变时,不会影响array2的属性。类似于C语言的值传递(形参传递)

array1 = np.arange(4)
os.system("cls")
print("当前array1:\n",array1,"\n")
array2 = array1  #  浅拷贝。类似于地址传递,实参赋值
print("array2浅拷贝array1:\n",array2,"\n") 
array2[2] = 6
print("array2[2]修改后的array2:\n",array2,"\n") 
print("array2[2]修改后的array1:\n",array1,"\n") #  array2 和 array是同一个东西
array1[1:3] = [8,9]
print("array1[1:3]修改后的array1:\n",array1,"\n") 
print("array1[1:3]修改后的array2:\n",array2,"\n") 

# 深拷贝
array3 = array1.copy()
print("array3深拷贝array1:\n",array3,"\n") 
array1[0] = 7
print("array1[0]修改后的array1:\n",array1,"\n")
print("array1[0]修改后的array3:\n",array3,"\n")

运行结果:
在这里插入图片描述

敬请批评指正。

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

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

相关文章

Sui x KuCoin Labs夏季黑客松|6月8日Suiet Workshop

由Sui和KuCoin Labs联合主办的夏季黑客松正如火如荼的报名中。了解黑客松详情:Sui与KuCoin Labs联合推出夏季黑客松,奖池高达28.5万美金! 👉 黑客松官方网站:Sui x KuCoin Labs Summer Hackathon 活动期间&#xff0…

2023年前端面试汇总-CSS

1. CSS基础 1.1. CSS选择器及其优先级 对于选择器的优先级: 1. 标签选择器、伪元素选择器:1; 2. 类选择器、伪类选择器、属性选择器:10; 3. id 选择器:100; 4. 内联样式:1000&a…

基于BP神经网络对MNIST数据集检测识别(numpy版本)

基于BP神经网络对MNIST数据集检测识别 1.作者介绍2.BP神经网络介绍2.1 BP神经网络 3.BP神经网络对MNIST数据集检测实验3.1 读取数据集3.2 前向传播3.3 损失函数3.4 构建神经网络3.5 训练3.6 模型推理 4.完整代码 1.作者…

EasyX实现简易贪吃蛇

📝个人主页:认真写博客的夏目浅石. 📣系列专栏:夏目的C语言宝藏 文章目录 前言一、头文件包含二、创建蛇与食物的结构体三、游戏的初始化四、游戏的绘画事件五、蛇的移动事件六、输入方向七、生成食物八、吃食物九、游戏失败的判定…

【Python开发】FastAPI 09:middleware 中间件及跨域

FastAPI 提供了一些中间件来增强它的功能,类似于 Spring 的切面编程,中间件可以在请求处理前或处理后执行一些操作,例如记录日志、添加请求头、鉴权等,跨域也是 FastAPI 中间件的一部分。 目录 1 中间件 1.1 创建中间件 1.2 使…

IDEA日常配置和操作小结

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: IDEA专栏 ✨特色专栏&…

算法刷题-数组-长度最小的子数组

209.长度最小的子数组 力扣题目链接 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s 7, …

电子元器件解析之电容(一)——定义与性能参数

下篇文章:电子元器件解析之电容(二)——电容分类与应用场景:https://blog.csdn.net/weixin_42837669/article/details/131142767 摘要 电容是最基本的电子元器件之一,本文介绍了电容的定义,并总结了电容的各个性能参数&#xff0c…

攻防世界—easyupload

2023.6.10 又试了一下 他好像会检测php字段,所以一开始的aaa.jpg怎么也传不上去,用a.jpg那种就可以了 根据题目和页面我们可以猜到这应该是一个利用文件上传漏洞,利用一句话木马来获取服务器上保存的flag保险起见右键查看源代码 可以发现毫无…

基础实验篇 | RflySim底层飞行控制算法开发系列课程总体介绍

本讲主要介绍多旋翼的特点及选用多旋翼作为实验平台的原因、对于无人系统教育的一些新需求、RflySim平台对于飞控的底层控制算法的开发优势、本期平台课程的设置、以及如何开发自驾仪系统。 相较于固定翼和直升机,多旋翼具有机械结构简单、 易维护的优点。以四旋翼…

使用 Pycharm 调试远程代码

文章目录 背景同步远程代码Interpreter注意点 背景 工作机是一台 Windows 电脑,而很多时候需要在 Mac 电脑上编码、配合 iPhone 模拟器,所以我以前是用 VNC 或者向日葵来远程 Mac 来编程,其实还能接受,但是最让我不舒服的是快捷键…

MySQL表操作:提高数据处理效率的秘诀(进阶)(2)

💕“学习难免有坎坷,重要的是你能尽力而为,持之以恒。”💕 🐼作者:不能再留遗憾了🐼 🎆专栏:MySQL学习🎆 🚗本文章主要内容:MySQL表操…

K Shortest Paths算法之Yen algorithm

Yen’s算法是一种在图论中用于计算单源K最短无环路径的算法,该算法由Jin Y. Yen在1971年提出。这个算法的时间复杂度和空间复杂度都取决于用于计算偏离路径的最短路径算法。如果使用Dijkstra算法,那么时间复杂度为O(KN3),采用Fibonacci堆计算…

Elasticsearch:Explain API - 如何计算分数

你想了解你的文档为何获得该分数吗? 文档 让我们通过一组示例文档来了解 Explain API。 就我而言,我将使用一小部分电影名言。 POST _bulk { "index" : { "_index" : "movie_quotes" } } { "title" : "T…

从malloc到跑路

当我还是一个懵懂无知的少年时,内心也曾升起这样的疑问这内存咋来的捏❓ 有个帅气的小哥哥给我甩了一篇博客:对,就是这篇,看完后总感觉意犹未尽,似乎少了点什么的样子。。。 还是从malloc开始 如果申请的内存小于64B…

“配置DHCP服务器和DHCP中继的网络自动配置实验“

"配置DHCP服务器和DHCP中继的网络自动配置实验" 【实验目的】 部署DHCP服务器。熟悉DHCP中继的配置方法。验证拓扑。 【实验拓扑】 实验拓扑如图所示。 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 DHCPSERVE S0/3/0 192.168.10.1 255.255.…

丰富上下文的超高分辨率分割:一种新的基准

文章目录 Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark摘要数据集Dataset SummaryData Collection and Pre-processing 数据标注数据统计 WSDNet实验结果 Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark …

SSM整合快速入门案例(一)

文章目录 前言一、设计数据库表二、创建工程三、SSM技术整合四、功能模块开发五、接口测试总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者…

不认识docker,怎么好意思说自己是干IT的

1.Docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环…

用户行为数据分析

文章目录 用户行为数据分析1 项目描述2 项目需求3 数据准备1、创建user_data数据表用于导入user_data.csv中的数据2、加载user_data.csv中的数据到user_data表3、接下来进行数据清洗,包括:删除重复值,时间戳格式化,删除异常值。 4…