用python构建一个范围为[0,1]的2D坐标矩阵。
也适用于将图片转换成2D的网格型数据,进而转换成坐标矩阵。
如果是图片,要先将图片转换成网格型数据:
import numpy as np
col, row = np.meshgrid(np.arange(img_size),np.arange(img_size))
PS:如果不是图片类型的数据,直接将img_size替换成需要的坐标系的相关参数即可(前面是列后面是行)。
然后利用stack函数将生成的数据转换成坐标系:
coord = np.stack((col,row), axis=2).reshape(-1,2) / img_size
补充:
(为了方便解释,这里假设img_size=3)
1.np.meshgrid的解释
np.arange(3) ->->-> [0,1,2]
np.meshgrid((0,1,2),(0,1,2)) ->->->
[array([[0,1,2],
[0,1,2],
[0,1,2]], array([[0,0,0],
[1,1,1],
[2,2,2]])]
col = [[0,1,2], [0,1,2], [0,1,2]]
row = [[0,0,0], [1,1,1], [2,2,2]]
2.np.stack的解释
1) axis = 0
就是正常在col下面堆叠row。
[[[0,1,2],[0,1,2],[0,1,2]],
[[0,0,0],[1,1,1],[2,2,2]]]
2) axis = 1
相当于抽取每一个矩阵的第一行堆叠在一起,形成第一个矩阵。
[[[0,1,2],[0,0,0]],
[[0,1,2],[1,1,1]],
[[0,1,2],[2,2,2]]]
2) axis = 2
相当于抽取每一个矩阵的每一个数堆叠在一起,形成一个矩阵。
[[[0,0],[1,0],[2,0]],
[[0,1],[1,1],[2,1]],
[[0,2],[1,2],[2,2]]]
3.reshape(-1,2)表示列不变,行平铺。
reshape后输出为:
[[0,0],
[1,0],
[2,0],
[0,1],
[1,1],
[2,1],
[0,2],
[1,2],
[2,2]]
来源:CSDN
作者:无宠不惊过一生
链接:https://blog.csdn.net/weixin_43330946/article/details/103239757