Pytorch Tensor的操作记录

[python]

t = torch.tensor([[[1,1,1,1],[2,2,2,2]],[[3,3,3,3],[4,4,4,4]],[[5,5,5,5],[6,6,6,6]]])

输出结果:

tensor([[[1, 1, 1, 1],
         [2, 2, 2, 2]],

        [[3, 3, 3, 3],
         [4, 4, 4, 4]],

        [[5, 5, 5, 5],
         [6, 6, 6, 6]]])
t.unsqueeze_(0) ##tt在最外层增加了一个维度,变成了4维。注意下划线,表示对t的本体进行操作,如果不带下划线,则其返回一个unsqueeeze的tensor,但是本体仍是三维
t.shape

输出结果:

torch.Size([1, 3, 2, 4]
t.squeeze_(0) ##t的维度又变为3维,shape打印如下
t.shape

输出结果:

torch.Size([3, 2, 4]) 
t[:,1:2,:] ##切片操作,返回t的第1维度上的index为1的所有元素组成的tensor

输出结果:

tensor([[[2, 2, 2, 2]],

        [[4, 4, 4, 4]],

        [[6, 6, 6, 6]]])
t[:,1:2,2:4] ##同时在两个维度上进行切片

输出结果:

tensor([[[2, 2]],

        [[4, 4]],

        [[6, 6]]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供一个基于 PyTorch 的 DBSCAN 聚类算法的代码示例。DBSCAN 是一种基于密度的聚类算法,可以有效地发现具有足够密度的区域。以下是使用 PyTorch 实现的 DBSCAN 聚类算法代码: ```python import torch import numpy as np def dbscan(X, epsilon, min_pts): """ :param X: 数据集(PyTorch Tensor) :param epsilon: 邻域半径 :param min_pts: 邻域中最小点数 :return: 聚类结果(PyTorch Tensor) """ visited = torch.zeros(X.size(0), dtype=torch.bool) noise = torch.zeros(X.size(0), dtype=torch.bool) clusters = [] cluster_id = 0 for point_id in range(X.size(0)): if visited[point_id]: continue visited[point_id] = True neighbors = region_query(X, point_id, epsilon) if neighbors.size(0) < min_pts: noise[point_id] = True else: cluster = expand_cluster(X, point_id, neighbors, epsilon, min_pts, visited) clusters.append(cluster) cluster_id += 1 return torch.cat(clusters), noise def region_query(X, point_id, epsilon): """ 找到给定点的 epsilon-邻域内所有的点 :param X: 数据集(PyTorch Tensor) :param point_id: 给定点的索引 :param epsilon: 邻域半径 :return: 邻域内的点的索引(PyTorch Tensor) """ return torch.nonzero(torch.sum((X - X[point_id])**2, dim=1) <= epsilon**2).squeeze() def expand_cluster(X, point_id, neighbors, epsilon, min_pts, visited): """ 从给定点开始拓展聚类 :param X: 数据集(PyTorch Tensor) :param point_id: 给定点的索引 :param neighbors: 邻域内的点的索引(PyTorch Tensor) :param epsilon: 邻域半径 :param min_pts: 邻域中最小点数 :param visited: 记录是否访问的标志(PyTorch Tensor) :return: 聚类结果(PyTorch Tensor) """ cluster = [point_id] for neighbor_id in neighbors: if not visited[neighbor_id]: visited[neighbor_id] = True new_neighbors = region_query(X, neighbor_id, epsilon) if new_neighbors.size(0) >= min_pts: neighbors = torch.cat((neighbors, new_neighbors)) if neighbor_id.item() not in [point.item() for point in cluster]: cluster.append(neighbor_id.item()) return torch.tensor(cluster) # 示例使用 X = torch.tensor([[1.0, 1.0], [1.5, 2.0], [3.0, 4.0], [5.0, 7.0], [3.5, 5.0], [4.5, 5.0], [3.5, 4.5]]) epsilon = 0.5 min_pts = 3 clusters, noise = dbscan(X, epsilon, min_pts) print("聚类结果:", clusters) print("噪音点:", noise) ``` 在这个示例中,我们使用纯 PyTorch 实现了 DBSCAN 聚类算法。首先定义了三个辅助函数:`region_query` 用于找到给定点的 epsilon-邻域内的所有点,`expand_cluster` 用于从给定点开始拓展聚类,`dbscan` 是 DBSCAN 算法的主要实现函数。 然后我们给出了一个数据集的示例,并调用 `dbscan` 函数进行聚类。最后打印出聚类结果和噪音点。 请注意,这只是一个简单的示例,实际应用中可能需要根据具体情况对代码进行修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值