【知识点】关于axis的理解(python)

本篇从两个例子argmax和sum两个函数来进行理解,是我的一个暂时性理解,不知道对不对,正确性有待验证。

axis可以理解为从哪个维度来计算:比如axis=0就表示从第零个维度开始计算。 (这里维度从0开始比较好理解)

如b[i][j]这里有2个维度,axis=0表示在i方向上进行变化,即b[0][j] b[1][j]。

输出的形状应该和b[0][j] 和b[1][j]中的任何一个一样,即1*3的一个张量。

二维:

b=torch.tensor([[1,2,3],[3,5,4]])
print(b.argmax(axis=0))
print(b.sum(axis=0))

  

首先b是一个二维张量,argmax返回的是最大值对应的下标索引(索引从零开始),sum返回求和结果。

argmax函数:对应的就是求每一列中的最大值的索引。

sum函数:对应的就是求每一列的元素的和。

这两者的答案都是按照b[i][j]中第0个维度(即维度i)的变化来进行计算的。

因为第0个维度在二维张量b中表示的是行,所以就是按照行来计算

所以当axis为1时就表示按第1个维度来进行计算,即按列:

b=torch.tensor([[1,2,3],[3,5,4]])
print(b.argmax(axis=1))
print(b.sum(axis=1))

三维:

b=torch.tensor(
    [
        [
            [1,2,13,4],
            [14,5,6,7],
            [10,9,7,8]
        ],
        [
            [4,3,12,1],
            [7,12,4,13],
            [13,4,7,15]
        ]
    ]
)
print(b.argmax(axis=0))
print(b.sum(axis=0))

 对于b[i][j][k]中axis=0时,表示按照第一个维度进行计算,最后计算出来的形状应该是[j][k]的形状。因为b是一个2*3*4张量,所以计算出来答案是一个3*4的形状。

如果把这个2*3*4看做一个立方体,那么就是把第二层的3*4张量和第二层的3*4张量来进行运算。

即  1和4  2和3  13和12   4和1

      ......

argmax:1和4最大是4,索引为1;2和3最大是3,索引为1;13和12最大是13 ,索引为0;4和1最大是4,索引为0......

sum:1+4=5;2+3=5;13+12=25;4+1=5......

当axis=1:

b=torch.tensor(
    [
        [
            [1,2,13,4],
            [14,5,6,7],
            [10,9,7,8]
        ],
        [
            [4,3,12,1],
            [7,12,4,13],
            [13,4,7,15]
        ]
    ]
)
print(b.argmax(axis=1))
print(b.sum(axis=1))

axis=1就按照b[i][j][k]中的i来运算,输出形状为i*k即2*4。 

参考:

https://www.cnblogs.com/touch-skyer/p/8509217.html

https://blog.csdn.net/sky_kkk/article/details/79725646

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这个问题是关于技术方面的,我可以帮您回答。您可以通过安装点云库,如PCL或Open3D,将深度图转换为点云数据。然后,您可以使用Python可视化库,如Matplotlib或Mayavi,对其进行可视化。在处理点云数据时,请确保您已经掌握了基本的点云操作和基本的Python编程知识。 ### 回答2: 要将Python深度图转换为点云图并进行可视化,可以使用一些库和工具。 首先,我们需要导入所需的库,包括OpenCV、NumPy和pyntcloud。使用OpenCV加载深度图像,然后使用NumPy将其转换为浮点数类型。 接下来,我们可以使用函数将深度图像转换为点云。在此过程,可以使用相机内部参数(如焦距和光心坐标)来校正点云。 可以将点云保存为Ply文件格式,然后使用pyntcloud库加载点云数据。使用pyntcloud的可视化函数可以将点云图像展示出来。 以下是一个示例代码: ```python import cv2 import numpy as np from pyntcloud import PyntCloud def depth_to_pointcloud(depth_map, fx, fy, cx, cy, scale=1.0): rows, cols = depth_map.shape u, v = np.meshgrid(np.arange(cols), np.arange(rows)) x = (u - cx) * depth_map / fx y = (v - cy) * depth_map / fy z = depth_map * scale points = np.stack((x, y, z), axis=-1) return points # 读取深度图像 depth_map = cv2.imread('depth_image.png', cv2.IMREAD_UNCHANGED).astype(float) / 1000.0 # 相机内参 fx = 500.0 fy = 500.0 cx = 320.0 cy = 240.0 # 深度图转换为点云 point_cloud = depth_to_pointcloud(depth_map, fx, fy, cx, cy) # 保存点云为Ply文件 PyntCloud.from_pandas(point_cloud).to_file('point_cloud.ply') # 加载点云数据 point_cloud_data = PyntCloud.from_file('point_cloud.ply') # 可视化点云 point_cloud_data.plot() ``` 在此示例,我们假设深度图像是以png格式存储的,并且深度值以毫米为单位。请根据实际情况进行调整。 执行上述代码后,将会生成一个点云图,并通过pyntcloud库进行可视化展示。 ### 回答3: Python深度图转点云图并可视化的实例可以通过使用Python的库进行实现。其,可以使用NumPy库来处理图像数据,使用Matplotlib库来进行可视化。 首先,需要从文件读取深度图像。可以使用OpenCV库来读取深度图像文件,并将其转换为灰度图像: ```python import cv2 depth_image = cv2.imread('depth_image.png', cv2.IMREAD_GRAYSCALE) ``` 接下来,可以使用NumPy库将深度图像转换为点云数据。点云是由三维坐标组成的数据集。深度图像的每个像素值表示了相应位置的点在相机坐标系下的深度。 ```python import numpy as np # 相机内参 focal_length = 500 # 相机焦距 center_x = 320 # 图像心点的x坐标 center_y = 240 # 图像心点的y坐标 # 获取深度图像的尺寸 height, width = depth_image.shape # 创建空的点云数据集 point_cloud = [] # 根据深度图像生成点云数据 for y in range(height): for x in range(width): # 获取深度值 depth = depth_image[y, x] # 转换成相机坐标系下的二维坐标 camera_x = (x - center_x) * depth / focal_length camera_y = (y - center_y) * depth / focal_length # 将相机坐标系下的二维坐标与深度值组成三维坐标,加入到点云数据集 point_cloud.append([camera_x, camera_y, depth]) # 将点云数据集转换为NumPy数组 point_cloud = np.array(point_cloud) ``` 最后,可以使用Matplotlib库将点云数据可视化: ```python from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt # 创建三维图形对象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制点云数据 ax.scatter(point_cloud[:, 0], point_cloud[:, 1], point_cloud[:, 2]) # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show() ``` 通过上述步骤,可以将深度图转换为点云图,并使用Matplotlib库进行可视化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值