pytorch 三角函数

本文详细介绍了在 PyTorch 框架中如何使用三角函数,包括正弦、余弦、正切等基本操作,以及它们在深度学习模型中的应用。通过实例代码解析,帮助读者掌握在 PyTorch 中进行三角函数计算的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

import torch
import numpy as np
import math
data = [-0.9999,-0.5, -0.1, 0.8,0.9]
tensor = torch.FloatTensor(data)  # 转换成32位浮点 tensor

# sin   三角函数 sin
print(
    '\nsin',torch.log(math.pi- torch.asin(tensor)),
    '\nnumpy: ', math.pi- np.arcsin(data),      # [-0.84147098 -0.90929743  0.84147098  0.90929743]
    '\ntorch: ', torch.sin( math.pi- torch.asin(tensor))  # [-0.8415 -0.9093  0.8415  0.9093]
)

 

### 使用 PyTorch 进行三角高程测量的计算或模拟 #### 1. 准备工作 要使用 PyTorch 实现三角高程测量,首先需要安装必要的库并导入所需模块: ```python import torch import numpy as np from scipy.spatial import Delaunay ``` #### 2. 创建 DEM 数据 假设有一个二维网格上的高度值矩阵 `heights` 表示地形的高度信息。这些数据可以从实际测得的数据集中获取或者人工生成用于测试目的。 ```python def generate_dem_data(size=(10, 10), seed=42): """Generate synthetic Digital Elevation Model (DEM) data.""" np.random.seed(seed) x = np.linspace(-5, 5, size[0]) y = np.linspace(-5, 5, size[1]) X, Y = np.meshgrid(x, y) Z = -(X ** 2 + Y ** 2) * 0.1 + np.sin(X) + np.cos(Y) + np.random.normal(scale=0.1, size=X.shape) return X.flatten(), Y.flatten(), Z.flatten() x, y, z = generate_dem_data() points = np.vstack((x, y)).T triangulation = Delaunay(points) ``` 此代码片段创建了一个简单的合成 DEM 数据集,并利用 SciPy 的 Delaunay 类构建 TIN 结构[^1]。 #### 3. 构建 TIN 并转换为张量形式 接下来将上述得到的 TIN 转换成适合 PyTorch 处理的形式: ```python faces = triangulation.simplices.copy() # 获取所有的面片索引 vertices = points[faces].reshape((-1, 9)) # 将顶点坐标展平成一维向量 vertex_tensor = torch.tensor(vertices).float().to('cuda' if torch.cuda.is_available() else 'cpu') face_indices = torch.arange(len(faces)).unsqueeze(1).repeat_interleave(3, dim=-1).view(-1).long() ``` 这里把每个三角形视为三个相连节点组成的平面,在后续操作中会更方便处理。 #### 4. 计算体积变化或其他属性 对于给定两个不同状态下的 DEM(即初始状态和最终状态),可以通过比较它们之间的差异来进行各种分析,比如估算挖掘土方量等。这一步骤涉及到积分运算,可以借助 Monte Carlo 方法近似求解。 ```python def estimate_volume_change(initial_heights, final_heights, num_samples=int(1e6)): """Estimate volume change between two states of a terrain using Monte Carlo method.""" device = initial_heights.device sample_points_x = ((torch.rand(num_samples, dtype=torch.float32)-0.5)*10.).to(device) sample_points_y = ((torch.rand(num_samples, dtype=torch.float32)-0.5)*10.).to(device) interpolated_initial_z = interpolate_bilinear(sample_points_x, sample_points_y, initial_heights.cpu()) interpolated_final_z = interpolate_bilinear(sample_points_x, sample_points_y, final_heights.cpu()) delta_volumes = (interpolated_final_z - interpolated_initial_z).mean(dim=0)*(10.*10.) return delta_volumes.item() # 假设已经得到了新的高度图 new_z new_z = ... volume_diff = estimate_volume_change(torch.from_numpy(z).float().to(vertex_tensor.device), torch.from_numpy(new_z).float().to(vertex_tensor.device)) print(f"The estimated volume difference is {volume_diff:.2f} cubic units.") ``` 这段代码实现了基于蒙特卡洛随机抽样的方式估计两次观测间总体积的变化情况。注意这里的插值函数 `interpolate_bilinear()` 需要自行实现或调用现有包中的相应功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值