【问题标题】:How to typecast a float tensor into long tensor without rounding error?如何在没有舍入误差的情况下将浮点张量类型转换为长张量?
【发布时间】:2019-06-26 14:50:49
【问题描述】:

我有一个浮点张量,它是通过将矩阵乘以它的逆矩阵(所以是单位矩阵)。当我转换为 int 时,它不是单位矩阵,即 1.0000e00 变为 0。我需要一种通过舍入进行类型转换的方法。

我尝试过使用 .int() 和 .long() 进行类型转换,但它们四舍五入为零。具体来说:

I = tensor([[ 1.0000e+00,  1.1921e-07, -1.1921e-07],
        [-5.9605e-08,  1.0000e+00,  0.0000e+00],
        [-2.9802e-08,  0.0000e+00,  1.0000e+00]])
I = I.long()
print(I)

给予:

tensor([[0, 0, 0],
        [0, 1, 0],
        [0, 0, 0]])

应该发生的是print(I)返回

tensor([[1, 0, 0],
        [0, 1, 0],
        [0, 0, 1]])

哪一行代码会将我的张量变成我想要的?它应该只占用一行。

【问题讨论】:

  • 尝试更新你的 pytorch。上面的代码适用于我机器上的预期结果。
  • 我正在使用torch,我认为可能会有所不同。例如,在这段代码之前我输入from torch import tensor
  • 我知道;当我运行这个确切的代码时,我会得到你想要的结果。
  • 嗯,你说得对。我在 Python3 中再次尝试,它工作正常。我最初在 Jupyter 中执行此操作时遇到了这个问题,所以也许这就是问题所在。

标签: python-3.x torch tensor


【解决方案1】:

答案是重启你的 Jupyter 内核,或者插入 python3。无论出于何种原因,这个错误发生在 Jupyter 笔记本中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2021-05-05
    • 2022-08-11
    • 2018-08-04
    • 2016-12-03
    相关资源
    最近更新 更多