目录

  • 二维meshgrid函数
  • 三维meshgrid函数
  • 特别说明

meshgrid函数在二维空间中可以简单地理解为将x轴与y轴的每个位置的坐标关联起来形成了一个网格,我们知道空间中的点是由坐标确定的,因此,当x与y关联起来后,我们便可以给与某个点某个特定值并画出对应的图像。具体的可以百度一下,会有很多较为详细的介绍。

这里我想要着重的说一下二维以及三维的meshgrid的参数indexing的问题。

二维meshgrid函数

import numpy as npclass Debug:def __init__(self):self.x = np.arange(5)self.y = np.arange(5)def grid(self):X, Y = np.meshgrid(self.x, self.y, indexing="xy")return X, Ymain = Debug()
X, Y = main.grid()
print("The X grid is:")
print(X)
print("The Y grid is:")
print(Y)
"""
The X grid is:
[[0 1 2 3 4][0 1 2 3 4][0 1 2 3 4][0 1 2 3 4][0 1 2 3 4]]
The Y grid is:
[[0 0 0 0 0][1 1 1 1 1][2 2 2 2 2][3 3 3 3 3][4 4 4 4 4]]
"""

从上面的结果可以看出,所获取的网格对应如下图所示,横向为x轴,纵向为y轴,类似于我们在几何空间中使用的坐标系, 我们通常称之为笛卡尔坐标系(Cartesian coordinate)。在二维meshgrid网格创建命令中,笛卡尔坐标系是默认的坐标系。

然而在python编程中,还有一种较为常用的indexing取法,代码如下:

import numpy as npclass Debug:def __init__(self):self.x = np.arange(5)self.y = np.arange(5)def grid(self):X, Y = np.meshgrid(self.x, self.y, indexing="ij")return X, Ymain = Debug()
i, j = main.grid()
print("The i grid is:")
print(i)
print("The j grid is:")
print(j)
"""
The i grid is:
[[0 0 0 0 0][1 1 1 1 1][2 2 2 2 2][3 3 3 3 3][4 4 4 4 4]]
The j grid is:
[[0 1 2 3 4][0 1 2 3 4][0 1 2 3 4][0 1 2 3 4][0 1 2 3 4]]
"""

此时从上面的结果我们可以看出,所获取的网格对应如下图所示,纵向为i轴,横向为j轴,我们在编程中通常很少使用的这种坐标系。但是它也有自己的优势,这里不进一步说明。

三维meshgrid函数

进一步我们讨论三维的情况,代码如下:

import numpy as npclass Debug:def __init__(self):self.x = np.arange(3)self.y = np.arange(3)self.z = np.arange(3)def grid(self):X, Y, Z = np.meshgrid(self.x, self.y, self.z)return X, Y, Zmain = Debug()
X, Y, Z = main.grid()
print("The X grid is:")
print(X)
print("The Y grid is:")
print(Y)
print("The Z grid is:")
print(Z)
"""
The X grid is:
[[[0 0 0][1 1 1][2 2 2]][[0 0 0][1 1 1][2 2 2]][[0 0 0][1 1 1][2 2 2]]]
The Y grid is:
[[[0 0 0][0 0 0][0 0 0]][[1 1 1][1 1 1][1 1 1]][[2 2 2][2 2 2][2 2 2]]]
The Z grid is:
[[[0 1 2][0 1 2][0 1 2]][[0 1 2][0 1 2][0 1 2]][[0 1 2][0 1 2][0 1 2]]]
"""

由上面的结果我们可以看到,此时的坐标轴对应如下图像:

x轴向下,y轴向屏幕内侧,z轴向右侧,在三维图像中不再根据indexing值来区分坐标轴了,而是统一规定了坐标轴的取法,只有对于这个坐标轴的取法深入理解,才能在之后的三维数据处理中游刃有余。

特别说明

但是这里有一个问题,来看一组代码:

class Debug:def __init__(self):x = np.array([[[0],[2]], [[4],[6]], [[8],[10]]])print(x.shape)main = Debug()
"""
(3, 2, 1)
"""

我们可以看到,输出结果为(3, 2, 1),即沿着x1个元素,沿着y2个元素,沿着z3个元素。再来看一下我们使用meshgrid方法生成三维网格的情况。

import numpy as npclass Debug:def __init__(self):self.x = np.arange(1)self.y = np.arange(2)self.z = np.arange(3)def grid(self):X, Y, Z = np.meshgrid(self.x, self.y, self.z)return X, Y, Zmain = Debug()
X, Y, Z = main.grid()
print("The X grid is:")
print(X.shape)
print("The Y grid is:")
print(Y.shape)
print("The Z grid is:")
print(Z.shape)
"""
The X grid is:
(2, 1, 3)
The Y grid is:
(2, 1, 3)
The Z grid is:
(2, 1, 3)
"""

我们可以看到,最终输出的X,Y,Zshape均为(2, 1, 3),这对应的是沿着x3个元素,沿着y1个元素,沿着z2个元素。突然感觉有些混乱,不符合我们之前想要得到的x,y,z的排列顺序,为了能够得到正常的排列顺序,我们可以使用如下代码:

import numpy as npclass Debug:def __init__(self):self.x = np.arange(1)self.y = np.arange(2)self.z = np.arange(3)def grid(self):X, Y, Z = np.meshgrid(self.y, self.z, self.x)return X, Y, Zmain = Debug()
X, Y, Z = main.grid()
print("The X grid is:")
print(X.shape)
print("The Y grid is:")
print(Y.shape)
print("The Z grid is:")
print(Z.shape)
"""
The X grid is:
(3, 2, 1)
The Y grid is:
(3, 2, 1)
The Z grid is:
(3, 2, 1)
"""

可以看到运行后我们得到了符合Python默认坐标轴习惯的网格形式,这时对应的x轴向右侧,y轴向下,z轴向屏幕里面。这个仅仅是为了理解需要,实际操作中无需进行这种坐标轴变换操作,直接使用默认的三维坐标轴方向即可。

如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

np.meshgrid函数中的indexing参数问题相关推荐

  1. np.meshgrid()函数 以及 三维空间中的坐标位置生成 以及 numpy.repeat()函数介绍

    一.np.meshgrid()函数 1.np.meshgrid()介绍 X, Y = np.meshgrid(x, y) 代表的是将x中每一个数据和y中每一个数据组合生成很多点,然后将这些点的x坐标放 ...

  2. seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加数据点显示数据的稠密程度

    seaborn使用violinplot函数可视化小提琴图.并在violinplot函数中设置inner参数来添加数据点显示数据的稠密程度(Seaborn violinplot with data po ...

  3. seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加横线(inner=“stick“)显示数据的稠密程度

    seaborn使用violinplot函数可视化小提琴图.并在violinplot函数中设置inner参数来添加横线(inner="stick")显示数据的稠密程度(Seaborn ...

  4. linux中probe函数中传递的参数来源(上)

    点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...

  5. ggplot2 | 图例(Ⅰ):图例函数、主题函数中的图例参数

    本篇是ggplot2基础语法系列的第六篇推文,来介绍与图例相关的函数和参数. library(ggplot2) library(patchwork) 下面两幅图代码的区别仅在于映射关系中,一个是col ...

  6. python中打开文件时只允许写入的模式是_在open函数中访问模式参数使用()表示打开一个文件只用于写入。(4.0分)_学小易找答案...

    [单选题]溢流坝属于( ) [单选题]在重力坝的底部沿坝轴线方向设置大尺寸的空腔,即为( ) [单选题]模式()的用途是打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾.(4.0分) ...

  7. [转载] 详细介绍Python函数中的默认参数

    参考链接: Python函数中的默认参数 详细介绍Python函数中的默认参数 import datetime as dt def log_time(message, time=None): if t ...

  8. 【问题】python open函数中的newline参数问题

    python版本:2.7 起由:在csv的写入list,提示TypeError: 'newline' is an invalid keyword argument for this function. ...

  9. R语言ggcharts包的dumbbell_chart函数可视化哑铃图(对比两个年份数据的差异)、scale_y_continuous函数中的labels参数自定义设置X轴坐标标签的格式

    R语言ggplot2可视化:使用ggcharts包的dumbbell_chart函数可视化哑铃图(对比两个年份数据的差异).使用scale_y_continuous函数中的labels参数自定义设置X ...

最新文章

  1. 阿里二面:main 方法可以继承吗
  2. MyBatis-22MyBatis缓存配置【一级缓存】
  3. JQuery选择器一般方法
  4. 使用diskpart命令修复U盘分区
  5. urlencode python_python爬虫之url中的中文问题
  6. OpenCV:OpenCV图像旋转的代码
  7. [线性代数]Note2--矩阵消元
  8. PHP5.3版本安装
  9. vmstat工具详解
  10. javascript监听输入框_html通过JS/jQuery实现 实时监听输入框input的内容
  11. 分析方法--FMEA,6sigma,脑力激荡法
  12. MCS-51系列单片机指令表
  13. EasyBCD and UEFI
  14. css多种方法画四分之一圆曲线
  15. SQL --理解SQL SERVER中的逻辑读,预读和物理读
  16. 特斯拉产业的几个问题
  17. 然后是几点--编程题
  18. 16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)
  19. [leetcode]378. 有序矩阵中第 K 小的元素
  20. 22.9.24 比赛

热门文章

  1. linux yum仓库命令,linux 自定义yum仓库、repo文件 yum命令
  2. 台式计算机usb口不识别鼠标,如何解决插入鼠标提示无法识别USB设备的问题
  3. 看我横向打你内网--PthPtk
  4. 如何在win10自带的Edge浏览器中切换成IE浏览器浏览网站
  5. 安卓miracast花屏_手机投屏电视频繁断开的解决办法
  6. android 手机 跑分榜,Android手机哪家强?安兔兔鲁大师榜单见分晓!
  7. 微信小程序开发坑背景图之微博图床
  8. 代码风格自动化(二)——husky + lint-staged
  9. Android M 六大新特性
  10. VS关闭vue语法检测