用numpy生成18种特殊数组

news2025/1/5 15:07:40

文章目录

    • 单值数组
    • 特殊矩阵
    • 范德蒙德矩阵
    • 数值范围
    • 坐标网格
    • 绘图代码

所有创建数组的函数中,都有一个可选参数dtype,表示创建的数组的数据类型。

指定维度empty, eye, identity, ones, zeros, full
模仿维度empty_like, ones_like, zeros_like, full_like
特殊矩阵diag, diagflat, tri, tril, triu, vander
数值范围arange, linspace, logspace, geomspace
坐标网格meshgrid, mgrid, ogrid, indices

单值数组

empty生成指定维度的空数组。

ones, zerosfull生成所有元素都相同的数组,顾名思义ones和zeros分别是全1和全0的数组,而full则可以指定其fill_value,例如

np.ones(3)              #生成全1的3x1数组
np.zeros([2,3])         #生成全0的2x3数组
x = np.full([2,4], 5)   #生成元素均为5的2x4数组

_like为后缀的函数,表示生成一个和输入数组维度相同的数组,以ones为例,np.ones_like(x)等价于np.ones(x.shape)

>>> y = np.full_like(x, 6)

特殊矩阵

eyeidentity都是生成对角为1,其他元素为0的矩阵,区别在于,identity只能生成单位矩阵,即方阵;而eye则可以生成行列数不同的矩阵。diagflatdiag用于生成对角矩阵,下面用图像的方式,来表现这四种对角矩阵

在这里插入图片描述

这些矩阵的生成方式就是每个子图标题中所显示的,完整的绘图代码附在文末。

diagdiagflat基础上,还可以提取对角元素,例如

>>> np.diag(np.ones([3,3])) #提取对角元素
array([1., 1., 1.])

tri(M,N,k)用于生成M行N列的三角阵,其元素为0或者1,k用于调节01的分界线相对于对角线的位置,下图中,红色表示1,蓝色表示0.

在这里插入图片描述
tril, triu可用于提取出矩阵的左下和右上的三角阵,其输入参数除了待提取矩阵之外,另一个参数与tri中的k相同,把x设为

x = np.arange(20).reshape(4, 5)

triltriu作用在x上的效果分别如下,二者分别把右上角和左下角的值变成了0。

在这里插入图片描述

范德蒙德矩阵

范德蒙德矩阵可表示为

[ 1 α 1 α 1 2 ⋯ α 1 n 1 α 2 α 2 2 ⋯ α 2 n ⋮ ⋮ ⋮ 2 ⋯ ⋮ n 1 α m α m 2 ⋯ α m n ] \begin{bmatrix} 1&\alpha_1&\alpha_1^2&\cdots&\alpha_1^n\\ 1&\alpha_2&\alpha_2^2&\cdots&\alpha_2^n\\ \vdots&\vdots&\vdots^2&\cdots&\vdots^n\\ 1&\alpha_m&\alpha_m^2&\cdots&\alpha_m^n \end{bmatrix} 111α1α2αmα12α222αm2α1nα2nnαmn

np.vander可通过给定的 α i \alpha_i αi生成范德蒙德矩阵,例如

x = np.array([1, 2, 3, 5])
y = np.vander(x, increasing=True)

其结果为

y = [ 1 1 1 1 1 2 4 8 1 3 6 9 1 5 25 125 ] y=\begin{bmatrix} 1&1&1&1\\1&2&4&8\\1&3&6&9\\1&5&25&125 \end{bmatrix} y= 1111123514625189125

数值范围

arange是Numpy中使用频率超高的一个数组生成器,其输入参数可以为一个、两个或者三个,调用结果如下图,其中横轴表示生成数组的下标,纵轴表示值

在这里插入图片描述

arange作用相似的函数是linspace,其输入参数为np.linspace(a,b,num),表示在 a , b a,b a,b之间等间隔生成num个数;如果指明endpoint=False,则不包含 b b b点。

np.linspace(1,2,5)  # [1.  , 1.25, 1.5 , 1.75, 2.  ]

linspacearange非常相似,区别如下

  • linspace(a,b,N) [ a , b ] [a,b] [a,b]中间生成N个值
  • arange(a,b,delta) [ a , b ) [a,b) [a,b)之间,以 d e l t a delta delta为间隔生成值

logspacelinspace逻辑相似,都是在某个区间内等间隔生成数组,但logspace是对数意义上的等间隔,其等价于10**np.linspace

print(np.logspace(1,2,5))
# [ 10.  17.7827941   31.6227766   56.23413252 100. ]
print(10**np.linspace(1,2,5))
# [ 10.  17.7827941   31.6227766   56.23413252 100. ]

logspace中的base参数,可以指定对数的底,例如

>>> print(np.logspace(1,2,5,base=2))
[2. 2.37841423 2.82842712 3.36358566 4.]

geomspace同样是等间隔生成对数,但和logspace的区别是,同样在a,b区间内生成对数,logspace生成范围是 [ 1 0 a , 1 0 b ] [10^a,10^b] [10a,10b]geomspace的范围则是 [ a , b ] [a,b] [a,b]

>>> print(np.geomspace(1,2,5))
[1. 1.18920712 1.41421356 1.68179283 2.]

这种区别可能过于微妙,画个图可能理解起来更加容易

对比如下

在这里插入图片描述

最后,总结一下这三个space函数的区别

  • linspace(a,b,N) [ a , b ] [a,b] [a,b]中间生成N个值
  • logspace(a,b,N,base=c) [ c a , c b ] [c^a, c^b] [ca,cb]之间等指数间隔生成N个值
  • geomspace(a,b,N,base=c) [ a , b ] [a,b] [a,b]之间,等指数间隔生成N个值

坐标网格

在三维图的绘制过程中,一般需要 x , y , z x,y,z x,y,z之间的对应关系,但对于图像而言,其 x , y x,y x,y轴坐标是体现在像素栅格中的,从而图像矩阵中的像素强度,其实表示的是 z z z轴的坐标,这种情况下如果想绘制三维散点图,就需要生成图像像素对应的坐标网格。

Numpy中,最常用的坐标网格生成函数,就是meshgrid,其用法可参考下面的示例

x = [0,1,2,3,4]
y = [0,1,2,3]
xv, yv = np.meshgrid(x, y)

其中

x v = [ 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 ] y v = [ 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 ] x_v=\begin{bmatrix} 0&1&2&3&4\\0&1&2&3&4\\0&1&2&3&4\\0&1&2&3&4\\ \end{bmatrix}\quad y_v=\begin{bmatrix} 0&0&0&0&0\\1&1&1&1&1\\2&2&2&2&2\\3&3&3&3&3\\ \end{bmatrix} xv= 00001111222233334444 yv= 01230123012301230123

直观地说,就是对输入的 x , y x,y x,y变量,分别向 y y y轴和 x x x轴方向进行了扩张。

mgridmeshgrid更加简单,可以直接通过魔法函数生成坐标网格。

>>> xv, yv = np.mgrid[0:2, 2:5]
>>> print(xv)
[[0 0 0]
 [1 1 1]]
>>> print(yv)
[[2 3 4]
 [2 3 4]]

当然,这个维度和步长可以任意选择,

>>> np.mgrid[1:5]
array([1, 2, 3, 4])
>>> np.mgrid[1:10:5]
array([1, 6])
>>> np.mgrid[1.1:10]
array([1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1])

如果翻阅源码,会发现mgridMGridClass()的一个实例,MGridClass则是nd_grid的一个子类,在nd_grid中,实现了__getitem__这个魔法函数,从而达成了[]的索引方法。

ogrid的用法与mgrid相同,二者都是nd_grid的子类,但生成的数组不同,直接看案例

>>>x,y = ogrid[0:5,0:5]

其中, x = [ 0 , 1 , 2 , 3 , 4 ] T x=[0,1,2,3,4]^T x=[0,1,2,3,4]T y = [ 0 , 1 , 2 , 3 , 4 ] y=[0,1,2,3,4] y=[0,1,2,3,4]

如果想干脆一点,只是生成从0开始的等间隔的坐标网格,那么这里最推荐的是indices,这个函数只需输入维度,就可以完成网格的创建。

接下来打开一张图片演示一下

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
img = plt.imread('test.jpg')
ax = plt.subplot(projection='3d')
gray = img[:,:,1]
yMat, xMat = np.indices(gray.shape)
ax.plot_surface(xMat, yMat, gray)
ax.axis('off')
plt.show()

效果为

在这里插入图片描述

绘图代码

对角矩阵

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(9,3))

ax = fig.add_subplot(141)
ax.imshow(np.identity(5))
plt.title("np.identity(5)")

ax = fig.add_subplot(142)
ax.imshow(np.eye(5,3))
plt.title("np.eye(5,3)")

ax = fig.add_subplot(143)
ax.imshow(np.diagflat([1,2,3]))
plt.title("np.diagflat([1,2,3])")

ax = fig.add_subplot(144)
ax.imshow(np.diag([1,2,3]))
plt.title("np.diag([1,2,3])")
plt.colorbar()

plt.tight_layout()
plt.show()

tri矩阵

fig = plt.figure(figsize=(9,4))
cmap = plt.get_cmap('jet')
for i in range(6):
    ax = fig.add_subplot(2,3,i+1)
    ax.invert_yaxis()
    ax.pcolor(np.tri(4,6,i), edgecolors='k', cmap=cmap)
    plt.title(f"np.tri(4,6,{i})")

plt.tight_layout()
plt.show()

tril和triu

x = np.arange(20).reshape(4, 5)
fig = plt.figure(figsize=(9,4))

ax = fig.add_subplot(121)
ax.invert_yaxis()
ax.imshow(np.tril(x,-1), cmap=cmap)
plt.title(f"np.tril(x,-1)")

ax = fig.add_subplot(122)
ax.invert_yaxis()
ax.imshow(np.triu(x,-1), cmap=cmap)
plt.title(f"np.triu(x,-1)")

plt.tight_layout()
plt.show()

arange

fig = plt.figure(figsize=(9,3))
ax = fig.add_subplot(131)
plt.stem(np.arange(10))
plt.title("np.arange(10)")

ax = fig.add_subplot(132)
plt.stem(np.arange(3,10))
plt.title("np.arange(3,10)")

ax = fig.add_subplot(133)
plt.stem(np.arange(3,10,2))
plt.title("np.arange(3,10,2)")

plt.tight_layout()
plt.show()

logspace和geospace

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1,2,20)
y = {"logspace" : np.logspace(1,2,20), 
"geomspace" : np.geomspace(1,2,20)}

fig = plt.figure()
for i,key in zip([1,2],y.keys()):
    ax = fig.add_subplot(1,2,i)
    ax.plot(x,y[key],marker="*")
    ax.set_title(key)

plt.show()

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

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

相关文章

【Linux】C语言实现对文件的加密算法

异或加密 解密方式是进行第二次加密后自动解密 #define BUF_SIZE (16384) //16k /************************************************************** 功能描述: 加密实现 输入参数: --------------------------------------------------------------- 修改作者: 修改日期…

【小尘送书-第五期】《巧用ChatGPT快速提高职场晋升力》用ChatGPT快速提升职场能力,全面促进自身职业发展

大家好,我是小尘,欢迎你的关注!大家可以一起交流学习!欢迎大家在CSDN后台私信我!一起讨论学习,讨论如何找到满意的工作! 👨‍💻博主主页:小尘要自信 &#x1…

qq录屏快捷键大全,玩转录制就这么简单(干货)

“qq有录屏快捷键吗?有点好奇,现在用qq录制屏幕,总是得去点击屏幕录制才可以出来,太麻烦了,如果可以通过快捷键的方式打开,会轻松许多,想问问大家,知道qq录屏快捷键是多少吗&#xf…

#你我都是国家队#,与泸州老窖一起为中国荣耀干杯

执笔 | 姜 姜 编辑 | 古利特 代表亚洲最高水平的体育盛会已经开幕两天,国家队运动员们在赛场上挥洒汗水,国人的激情也随之升温。 为迎接这场体育盛会,9月13日,TEAM CHINA中国国家队官方微博携手泸州老窖发布了一条态度短片&am…

R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类...

原文链接:http://tecdat.cn/?p21379 本文我们对逻辑回归和样条曲线进行介绍(点击文末“阅读原文”获取完整代码数据)。 logistic回归基于以下假设:给定协变量x,Y具有伯努利分布, 目的是估计参数β。 回想一…

如何在Python中实现高效的数据处理与分析

在当今信息爆炸的时代,我们面对的数据量越来越大,如何高效地处理和分析数据成为了一种迫切的需求。Python作为一种强大的编程语言,提供了丰富的数据处理和分析库,帮助我们轻松应对这个挑战。本文将为您介绍如何在Python中实现高效…

【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 二维互相关运算(corr2d) 2. 二维卷积层类(Conv2D) a. __init__(初始化) b. forward(前向传…

Vue2 常用用法

Vue2 常用用法 Vue 动画1. 进入、离开的过渡2. 列表的过渡3. 状态的过渡 Vue 透传Attrbute、插槽1.透传Attrbute2. 插槽 CSS布局原则flex 布局常见的问题:当子元素内容超出父元素时,不出现滚动条的问题。父元素flex:1且内容超出后的最佳解决方案&#xf…

新版首途影视视频网站源码/22套带后台版全开源+无加密源码(全新二开完整版)

源码简介: 首途影视是一个非常受欢迎的视频网站,提供各种电影、电视剧、综艺节目等内容。它是一个基于Web的视频流媒体平台,你可以随时随地在手机上或电脑上在线观看自己喜欢的影视作品。 新版首途影视视频网站源码/22套带后台版全开源无加…

U盘恢复怎么做?4个方法,拯救你的u盘数据!

“我的u盘对我来说意义重大,里面保存着很重要的照片和视频。但是不知道是不是太久没使用,现在将u盘插入电脑后,有些数据好像丢失了,完全没办法查看了。怎么解决呢?” 随着u盘的广泛使用,数据丢失问题也更为…

7.16 SpringBoot项目实战 【学生入驻】(下):正确理解 编程式事务和声明式事务

文章目录 前言一、service层1. 提交学生信息2. 申请借阅资格3. 重新提交4. 事务 二、web层 StudentController三、测试最后 前言 通过上文,我们实现了【学生入驻】的第一个API:查询学生信息,接下来的流程通常如下图:如果学生未入…

Python第二次作业(2)【控制台界面】

要求:使用Python输出五个控制台界面 第一张: 代码如下: print(" 英雄联盟商城登录界面 ") print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*") print(" 1.用户登录 &q…

STL常用遍历、查找算法

目录 算法概述 常用遍历算法for_each 常用遍历算法transform 常用查找算法find 常用查找算法find_if 常用查找算法adjacent_find 常用查找算法binary_search 常用查找算法count 常用查找算法count_if 算法概述 算法主要是由头文件<algorithm><functional>…

Linux系统编程-文件

目录 1、系统编程介绍以及文件基本操作文件编程系统调用文件基本读写练习 2、文件描述符以及大文件拷贝文件描述符大文件拷贝对比试验 3、文件实战练习 1、系统编程介绍以及文件基本操作 系统编程是基于Linux封装好的一些函数&#xff0c;进行开发。 Linux文件信息属性在indo…

面试题:集群高并发环境下如何保证分布式唯一全局ID生成?

文章目录 前言问题为什么需要分布式全局唯一ID以及分布式ID的业务需求ID生成规则部分硬性要求ID号生成系统的可用性要求 一般通用解决方案UUID数据库自增主键 集群分布式集群基于Redis生成全局ID策略单机版集群分布式 雪花算法什么是雪花算法结构实现SpringBoot整合雪花算法 前…

【Pm4py第七讲】关于visualization

本节用于介绍pm4py中的可视化函数&#xff0c;包括可视化bpmn、petri、性能图谱、变迁系统等。 1.函数概述 本次主要介绍Pm4py中一些常见的可视化函数&#xff0c;总览如下表&#xff1a; 函数名说明view_alignments(log, aligned_traces[, format])可视化对齐方法 view_bpmn(…

QT之QML开发 行列布局,流布局,网格布局

本节将演示一下QML布局之行列布局&#xff0c;流布局和网格布局 目录 1.行列布局 1.1一列多行 1.2 一行多列 2.流布局 2.1 从左向右&#xff08;默认&#xff09; ​编辑 2.2 从上往下 3.网格布局 1.行列布局 1.1一列多行 // 行列布局 import QtQuick 2.15 import Qt…

前端架构师进阶之路07_JavaScript函数

1 函数的定义与调用 1.1 初识函数 函数是用于封装一段完成特定功能的代码。 相当于将一条或多条语句组成的代码块包裹起来&#xff0c;在使用时只需关心参数和返回值&#xff0c;就能完成特定的功能&#xff0c;而不用了解具体的实现。 // 内置函数 console.log(parseFloat…

基于R语言、MATLAB、Python机器学习方法与案例分析

目录 基于R语言机器学习方法与案例分析 基于MATLAB机器学习、深度学习在图像处理中的实践技术应用 全套Python机器学习核心技术与案例分析实践应用 基于R语言机器学习方法与案例分析 机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”&#xff0c;是发现新规律&…

iOS技术之app审核信息填写联系人信息提交失败

在AppStore Connect中填写联系人信息中联系方式的电话号码时,输入11位手机号,一直提示 此栏无效: 报错一直说明次栏无效, 开始以为手机号不兼容, 换了好多手机号,座机号都不行, 最终尝试正确的输入格式是:86-xxxxxxxxxxx, 前面有""号, 连接用"-"