predicted_point里面没有全0点 只有after_points里面有 这两个点集不是对应计算吗 after_points里面的全0点集 predicted_points里面也跳过
时间: 2024-12-19 17:26:19 浏览: 5
既然`predicted_points`中没有全零点,而`after_points`中有全零点集,那么在计算两者的对应点之间的距离时确实不需要考虑`predicted_points`中的点。只需要从`after_points`中找出那些全零的行或块,并跳过这些部分来计算实际的距离。
首先,你可以找到`after_points`中所有非零行或块的位置:
```python
non_zero_indices = torch.nonzero(after_points, as_tuple=True) # 获取非零索引
```
接着,基于这些索引,你可以选择对应的`predicted_points`部分进行计算:
```python
filtered_after_points = after_points[non_zero_indices]
# 如果有必要,将filtered_after_points的形状调整成与predicted_points一致
# 如果predicted_points的形状是 [height, width, channels],则可以使用 squeeze 或者 expand
filtered_predicted_points = predicted_points[:, non_zero_indices[-2], non_zero_indices[-1]]
# 然后计算对应点的距离
distances = torch.norm(filtered_after_points - filtered_predicted_points, dim=-1)
```
最后,只对非零点集求平均距离:
```python
valid_distances = distances.sum() / len(distances) # 计算非零点集的距离平均值
```
阅读全文