NumPy库的学习
本文主要记录的是笔者在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")
运行结果:
敬请批评指正。
相关文章:
NumPy库的学习
本文主要记录的是笔者在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:"…...
CentOS安装IRIS
最近电脑提搞了,可以无顾虑创建虚拟机了,试一下在Linux安装IRIS,适用CentOS7.6上安装Intersystem公司的IRIS数据库,资料基本是空白,分享一下。 首先安装解压软件unzip和libicu,最小化安装的缺,…...
华为OD机试真题 JavaScript 实现【最多几个直角三角形】【2023Q1 100分】
一、题目描述 有 N 条线段,长度分别为 a[1]-a[n]。 现要求你计算这 N 条线段最多可以组合成几个直角三角形,每条线段只能使用一次,每个三角形包含三条线段。 二、输入描述 第一行输入一个正整数 T (1< T< 100) ,表示有…...
vue3中的reactive、ref、toRef和toRefs
目录 reactivereactive的实现原理使用reactive的注意事项 refref的实现原理使用ref的注意事项 toRef和toRefsref和reactive的使用比较 reactive reactive用于创建响应式对象,它返回一个对象的响应式代理。即:它返回的对象以及其中嵌套的对象都会通过 Pr…...
数字图像处理与Python实现-图像增强经典算法汇总
图像增强经典算法汇总 文章目录 图像增强经典算法汇总1、像素变换2、图像逆变换3、幂律变换4、对数变换5、图像均衡化6、对比度受限自适应直方图均衡(CLAHE)7、对比度拉伸8、Sigmoid校正9、局部对比度归一化10、总结本文将对图像增强经典算法做一个简单的汇总。图像增强的经典…...
tag提示词总结
顺序的权重 越靠前的tag权重越大,越靠后的tag权重越小经验来讲,将图像质量相关的tag放在前面,例如masterpiece,best quality等;接着添加主体画风等;最后添加一些不太重要的细节 权重增减 (tag):…...
微信小程序原生开发功能合集二十:导航栏、tabbar自定义及分包功能介绍
本章实现导航栏及tabbar的自定义处理的相关方法介绍及效果展示。 另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下: 1. CSDN课程: https://edu.csdn.net/course/detail/37977 2. 5…...
高通 Camera HAL3:项目开发技术点总结
做高通 Camera HAL3开发的一些技术点的总结、整理。 做个记录,方便后续查阅。 1.目录、so、配置文件 productName是项目名 out Target路径:\out\target\product\productName\chi-cdk:\vendor\qcom\proprietary\chi-cdk\ldc node࿱…...
chatgpt赋能python:Python怎么删除列表中的最大值和最小值
Python怎么删除列表中的最大值和最小值 在Python中,一个列表(List)是一种非常常见的数据结构,它允许我们以有序的方式存储和访问数据。但是,有时候我们需要从列表中删除最大或最小的值,以满足我们的特定需…...
简述Vue的生命周期以及每个阶段做的事情
03_简述Vue的生命周期以及每个阶段做的事情 思路 给出概念 列举出生命周期各个阶段 阐述整体流程 结合实际 扩展:vue3变化 回答范例 每个vue组件实例被创建后都会经过一系列步骤。比如它需要数据观测、模板编译、挂载实例到dom、以及数据变化的时候更新dom、…...
LeetCode-C#-0004.寻找两个正序数组的中位数
0.声明 该题目来源于LeetCode 如有侵权,立马删除。 解法不唯一,如有新解法可一同讨论。 1.题目 0004寻找两个正序数组的中位数 给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。 请你找出并返回着两个正序数组的中位…...
Vue.js 中的 $emit 和 $on 方法有什么区别?
Vue.js 中的 $emit 和 $on 方法有什么区别? 在 Vue.js 中,$emit 和 $on 方法是两个常用的方法,用于实现组件间的通信。它们可以让我们在一个组件中触发一个自定义事件,并在另一个组件中监听这个事件,从而实现组件间的…...
LAZADA平台的商品评论Python封装API接口接入文档和参数说明
LAZADA是一个位于东南亚的电商平台,成立于2012年。该平台覆盖的国家包括新加坡、马来西亚、印尼、菲律宾、泰国和越南等地。它提供了一个多样化的产品选择,包括时尚、美容、数码、母婴等商品,并且拥有许多知名品牌的官方旗舰店。同时…...
云原生Docker镜像管理
docker是什么? docker是一个go语言开发的应用容器引擎。 docker的作用? ①运行容器里的应用; ②docker是用来管理容器和镜像的一种工具。 #容器 与 虚拟机 的区别? 容器虚拟机所有容器共享宿主机内核每个虚拟机都有独立的操…...
ChatGPT+小红书的8种高级玩法
掌握了这套万能命令,让你快速做出小红书爆款文案! 一、用ChatGPT做定位 我是一个大龄的普通人,没有什么特殊的技能,接下来,请你作为一位小红书的账号定位专家,通过与我对话的方式,为我找到我的小红书账号定…...
shell脚本学习记录1(运算符)
Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个…...
vector 迭代器失效问题
vector 迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所指向…...
docker使用与服务器上的可视化(ROS rviz等)
1.安装docker 安装docker:官网教程,按照官网命令一步步来即可。 添加当前用户到docker用户组: 【docker】添加用户到docker组,这样后面运行docker的时候前面不需要加sudo命令,否则运行docker的时候一直需要在前面加su…...
最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包
在Portraiture有非常强大的手动功能,可以为用户进行手动调整照片中的皮肤区域以达到更加完美的效果,软件还支持同时导入上千张照片,用户可以通过自动识别照片中的人脸从而依照自己的风格进行批量处理十分的方便快捷。 最新版本Portraiture 4…...
仓储WMS对接淘宝奇门详细说明【亲测可用】
文章目录 简介名词解释奇门对接方案前期准备系统调用流程代码实现思路关键点(个人观点)奇门对接关键代码可能遇到的问题 简介 淘宝奇门项目支持 ERP、WMS 之间的系统标准化对接,通过构建 ERP、WMS 系统之间标准通信协议来实现不同系统之间的打通;对商家…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
Async-profiler 内存采样机制解析:从原理到实现
引言 在 Java 性能调优的工具箱中,async-profiler 是一款备受青睐的低开销采样分析器。它不仅能分析 CPU 热点,还能精确追踪内存分配情况。本文将深入探讨 async-profiler 实现内存采样的多种机制,结合代码示例解析其工作原理。 为什么需要内…...
阿里云Alibaba Cloud安装Docker与Docker compose【图文教程】
个人记录 进入控制台,找到定时与自动化任务 进入‘安装/卸载扩展程序’ 点击‘安装扩展程序’ 选择docker社区版,点击下一步与确定,等待一会 安装成功 查询版本 查询docker sudo docker version查询docker compose sudo docker compo…...


















