热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

np.meshgrid()用法+np.stack()用法

A,B,C,D,E,F是6个网格点,坐标如图,如何用矩阵形式(坐标矩阵)来批量描述这些点的坐标呢?答案如下这就

 

 

A,B,C,D,E,F是6个网格点,坐标如图,如何用矩阵形式(坐标矩阵)来批量描述这些点的坐标呢?
答案如下

这就是坐标矩阵——横坐标矩阵X XX中的每个元素,与纵坐标矩阵Y YY中对应位置元素,共同构成一个点的完整坐标。如B点坐标(X12,Y12)=(1,1)

 

 

语法:X,Y = numpy.meshgrid(x, y)
输入的x,y,就是网格点的横纵坐标列向量(非矩阵)
输出的X,Y,就是坐标矩阵。

stack()函数 
函数原型为:stack(arrays, axis=0),arrays可以传数组和列表。axis的含义我下面会讲解,我们先来看个例子,然后我会分析输出结果。

import numpy as np
a
=[[1,2,3],[4,5,6]]
print("列表a如下:")
print(a)print("增加一维,新维度的下标为0")
c
=np.stack(a,axis=0)
print(c)print("增加一维,新维度的下标为1")
c
=np.stack(a,axis=1)
print(c)输出:
列表a如下:
[[
1, 2, 3], [4, 5, 6]]
增加一维,新维度下标为0
[[
1 2 3][4 5 6]]
增加一维,新维度下标为1
[[
1 4][2 5][3 6]]

 

例如上面的代码中a列表中的第一个元素为[1,2,3],那么当axis=0的时候,就是在它的中括号外面再加一个中括号,变成[ [1,2,3] ](其实1,2,3之间是没有逗号的,因为stack()函数会先把参数arrays中的每个元素变成numpy的数组,数组之间是没有逗号的,看看上面的代码输出就知道了,这里大家明白就行,我为了方便讲解,下面还会加上逗号),这样最外面那层中括号才代表维度下标为0的那维;当axis=1的时候,就是在里面加个中括号,变成了[ [1],[2],[3] ],这样里面加的那层中括号才代表维度下标为1的那维。同理当axis=0的时候[4,5,6]变成[ [ 4,5,6] ],当axis=1的时候,变成[ [4],[5],[6] ]。下面我们讲如何把增加一维度后的每个元素串起来。

怎么把上面那两个元素增加维度后的结果串起来呢,其实很简单。现在我们已经知道了增加维度无非是增加中括号的意思,至于在哪里加中括号,取决于axis等于几。我们把增加的中括号想像成一个个的箱子。还拿上面的代码来说,当axis=0的时候,我们把套在[1,2,3]外面的中括号(就是[ [1,2,3] ]最外层的那个中括号)看做是箱子A,这个箱子A也会套在[4,5,6]的外面,所以我们就先把[1,2,3]和[4,5,6]放在一起,变成[1,2,3],[4,5,6],然后再一起套上箱子A,变成[ [1,2,3],[4,5,6] ]这就是当axis=0的时候程序的输出结果。

现在再来看当axis=1的时候,对于[1,2,3],我们把套在1外面的箱子(就是上面讲的[ [1],[2],[3] ]中1外面的那层中括号)看做A,套在2外面的看做B,套在3外面的看做C,同理,箱子A也会套在4的外面,箱子B也会套在5的外面,箱子C也会套在6的外面。那么我们就把1和4放一起,2和5放一起,3和6放一起,变成[ 1,4 ,2,5 ,3,6 ]然后把箱子A,B,C分别套在1,4 , 2,5 , 3,6的外面,变成[ [1,4] , [2,5] , [3,6] ]这就是程序中axis=1的时候程序的输出结果。

大家发现了没有,串起来的时候其实就是把arrays中每个元素在相同的位置套箱子的一些小块(这里叫小块这个名词可能不洽当,但是大家明白就行)放在一起后,再套箱子,就是外面套个中括号,这就是堆叠。

1 import numpy as np
2 a=[[1,2,3],
3 [4,5,6]]
4 b=[[1,2,3],
5 [4,5,6]]
6 c=[[1,2,3],
7 [4,5,6]]
8 print("a=",a)
9 print("b=",b)
10 print("c=",c)
11
12 print("增加一维,新维度的下标为0")
13 d=np.stack((a,b,c),axis=0)
14 print(d)
15
16 print("增加一维,新维度的下标为1")
17 d=np.stack((a,b,c),axis=1)
18 print(d)
19 print("增加一维,新维度的下标为2")
20 d=np.stack((a,b,c),axis=2)
21 print(d)
22
23 输出:
24 ('a=', [[1, 2, 3], [4, 5, 6]])
25 ('b=', [[1, 2, 3], [4, 5, 6]])
26 ('c=', [[1, 2, 3], [4, 5, 6]])
27 增加一维,新维度的下标为0
28 [[[1 2 3]
29 [4 5 6]]
30
31 [[1 2 3]
32 [4 5 6]]
33
34 [[1 2 3]
35 [4 5 6]]]
36 增加一维,新维度的下标为1
37 [[[1 2 3]
38 [1 2 3]
39 [1 2 3]]
40
41 [[4 5 6]
42 [4 5 6]
43 [4 5 6]]]
44 增加一维,新维度的下标为2
45 [[[1 1 1]
46 [2 2 2]
47 [3 3 3]]
48
49 [[4 4 4]
50 [5 5 5]
51 [6 6 6]]]
52 ---------------------
53 作者:neu_张康
54 来源:CSDN
55 原文:https://blog.csdn.net/csdn15698845876/article/details/73380803
56 版权声明:本文为博主原创文章,转载请附上博文链接!

当axis=0的时候,列表a,b,c最外面都需要套箱子(就是加中括号),那么我把你们先放一起,变成下面这样

[[1,2,3],[4,5,6]],
[[
1,2,3],[4,5,6]],
[[
1,2,3],[4,5,6]]

View Code

然后在最外面套箱子,变成

[
[[
1,2,3],[4,5,6]],
[[
1,2,3],[4,5,6]],
[[
1,2,3],[4,5,6]]
]

View Code

当axis=1的时候,列表a,b,c中的[1,2,3]需要套同样的箱子,列表a,b,c中的[4,5,6]需要套同样的箱子,好,我先把你们放一块变成下面这样

[[1,2,3],[1,2,3],[1,2,3],[4,5,6],[4,5,6],[4,5,6]]

View Code

然后开始分别在 [1,2,3],[1,2,3],[1,2,3]的外面和[4,5,6],[4,5,6],[4,5,6]的外面套箱子,变成下面这样

[[[1,2,3],[1,2,3],[1,2,3]],[[4,5,6],[4,5,6],[4,5,6]]]

当axis=2的时候,列表a,b,c中的1,2,3,4,5,6都需要套箱子,我把你们先放一起变成:

[[1,1,1 , 2,2,2 , 3,3,3],[4,4,4 , 5,5,5 , 6,6,6]
]

View Code

然后在1,1,1 ………6,6,6的外面分别套箱子变成:

[[[1,1,1] , [2,2,2] , [3,3,3]],[[4,4,4] , [5,5,5] , [6,6,6]]
]

 重点:

np.meshgrid生成的坐标矩阵可以用np.stack指定axi还原各个点坐标

举例:

generate anchors 中频繁使用np.meshgrid,最后用np.stack将shift_x,shift_y stack ,返回每一个anchor的值


原文:https://blog.csdn.net/csdn15698845876/article/details/73380803
版权声明:本文为博主原创文章,转载请附上博文链接!

 来源:https://blog.csdn.net/lllxxq141592654/article/details/81532855

转:https://www.cnblogs.com/lucky466/p/10223652.html



推荐阅读
  • ML学习笔记20210824分类算法模型选择与调优
    3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1& ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文档介绍了如何在Visual Studio 2010环境下,利用C#语言连接SQL Server 2008数据库,并实现基本的数据操作,如增删改查等功能。通过构建一个面向对象的数据库工具类,简化了数据库操作流程。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细介绍了 React 中的两个重要 Hook 函数:useState 和 useEffect。通过具体示例,解释了如何使用它们来管理组件状态和处理副作用。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有