【问题标题】:How can I convert PyTorch Tensor to ndarray of Numpy?如何将 PyTorch 张量转换为 Numpy 的 ndarray?
【发布时间】:2021-02-24 16:36:15
【问题描述】:

我的张量的形状是torch.Size([3, 320, 480])

张量是

tensor([[[0.2980, 0.4353, 0.6431,  ..., 0.2196, 0.2196, 0.2157],
         [0.4235, 0.4275, 0.5569,  ..., 0.2353, 0.2235, 0.2078],
         [0.5608, 0.5961, 0.5882,  ..., 0.2314, 0.2471, 0.2588],
         ...,

         ...,
         [0.0588, 0.0471, 0.0784,  ..., 0.0392, 0.0471, 0.0745],
         [0.0275, 0.1020, 0.1882,  ..., 0.0196, 0.0157, 0.0471],
         [0.1569, 0.2353, 0.2471,  ..., 0.0549, 0.0549, 0.0627]]])

我猜我需要形状为 320、480、3 的东西

所以,张量应该是这样的

array([[[0.29803923, 0.22352941, 0.10980392],
        [0.43529412, 0.34117648, 0.20784314],
        [0.6431373 , 0.5254902 , 0.3764706 ],
        ...,

        ...,
        [0.21960784, 0.13333334, 0.05490196],
        [0.23529412, 0.14509805, 0.05490196],
        [0.2627451 , 0.1764706 , 0.0627451 ]]], dtype=float32)

【问题讨论】:

  • pytorch 提供的创建数组的方法开始。一旦你有了一个,你就可以执行必要的np.transpose(参见文档)。
  • 您好,tensor.permute 和 np.transpose 有什么区别? TIA

标签: numpy pytorch reshape numpy-ndarray


【解决方案1】:

首先使用 .cpu() 将设备更改为主机/cpu(如果它在 cuda 上),然后使用 .detach() 从计算图分离,然后使用 .numpy() 转换为 numpy

t = torch.tensor(...).reshape(320, 480, 3)
numpy_array = t.cpu().detach().numpy()

【讨论】:

  • 它给了我类似这样的数组([[[0.49019608, 0.4745098, 0.42352942, ..., 0.23921569, 0.24705882, 0.25882354], ... .
  • 这只是将您的张量转换为数组。啊,你也想重塑吗?
  • 是的,我需要成功(320、480、3)
  • 嗯好的。这很奇怪,因为 320 * 480 * 3 = 3 * 320 * 480 = 460800 。你确定你正在重塑正确的张量吗?
【解决方案2】:

我为我找到了另一个解决方案

t = torch.tensor(...).permute(1, 2, 0).numpy()

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 2019-06-13
    • 1970-01-01
    • 2020-11-15
    • 2020-02-09
    • 2021-04-28
    • 2022-10-17
    • 2019-04-27
    • 2019-10-23
    相关资源
    最近更新 更多