【小记】2024/10/2

1

线代内积和外积

2

在 PyTorch 中,x.dot(torch.ones(3)) 是执行向量点积(dot product)操作的代码。假设 x 是一个一维张量(向量),其形状是 (N,),且 N 应该与 torch.ones(3) 的长度相匹配。具体来说,torch.ones(3) 创建了一个长度为 3 的全 1 向量。

以下是一些例子,以更清楚地说明这个操作:

示例 1

import torch

x = torch.tensor([1.0, 2.0, 3.0])  # 一个长度为 3 的向量
result = x.dot(torch.ones(3))  # 计算点积
print(result)  # 输出结果是 6.0,因为 1 + 2 + 3 = 6

示例 2

如果 x 的长度不为 3,则会导致错误:

import torch

x = torch.tensor([1.0, 2.0])  # 一个长度为 2 的向量
result = x.dot(torch.ones(3))  # 这会抛出错误

在这种情况下,会抛出一个 RuntimeError,提示两个张量的形状不匹配。

总结

  • xtorch.ones(3) 必须具有相同的大小。
  • 点积运算是将两个对应元素相乘后求和。

确保在进行点积计算时,两个向量的长度一致,这样才能获得预期的结果。

3

你遇到的错误是因为试图对一个奇异矩阵(singular matrix)进行求逆操作。在你的代码中,你尝试对一个全是 1 的 5x5 矩阵 x = torch.ones(5, 5) 进行求逆,这导致了 LinAlgError

奇异矩阵

奇异矩阵是一个行列式为零的矩阵,无法求逆。你创建的全 1 矩阵的行列式为零,因为所有行或列都是线性相关的(可以通过加和或标量乘法得到其他行或列)。

解决方案

为了对矩阵求逆,你需要确保矩阵是非奇异的,即它的行列式不为零。通常,这可以通过构造一个对角线元素都非零的矩阵来实现。

示例:创建一个可逆矩阵并求逆
import torch

# 创建一个对角线元素都非零的5x5矩阵
x = torch.tensor([[1.0, 2.0, 3.0, 4.0, 5.0],
                  [0.0, 6.0, 7.0, 8.0, 9.0],
                  [0.0, 0.0, 10.0, 11.0, 12.0],
                  [0.0, 0.0, 0.0, 13.0, 14.0],
                  [0.0, 0.0, 0.0, 0.0, 15.0]])

# 求逆
inverse_x = x.inverse()
print(inverse_x)

在这个示例中,x 是一个 5x5 矩阵,并且你可以确保它的行列式不为零,因此可以顺利地进行求逆。

注意事项
  1. 可逆矩阵:确保你的矩阵是可逆的,通常矩阵的对角线元素应该都非零。
  2. 矩阵的形状:在进行求逆之前,确认这个矩阵是方阵(行数和列数相等)。
  3. 数值稳定性:在实际应用中,有些矩阵即使是非奇异的,数值反演也可能非常不稳定。因此,在涉及求逆时,最好检查矩阵的条件数(condition number)。

其他替代方案

如果你的应用不一定需要求逆,可以考虑使用一些数值解法,例如使用 torch.linalg.solve 解决线性方程组,而不是明确地计算矩阵的逆。这通常更稳定和高效。

4.numpy与tensor相互转换

在 NumPy 和 Tensor(如 PyTorch 的 Tensor 或 TensorFlow 的 Tensor)之间进行相互转换时,这两个库的数组是用不同的内存管理方式进行管理的。因此,默认情况下,它们之间的转换是不会共享地址的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值