【问题标题】:TypeError: can't convert np.ndarray of type numpy.object_TypeError:无法转换 numpy.object_ 类型的 np.ndarray
【发布时间】:2019-09-07 11:57:15
【问题描述】:

如何将 numpy ndarry 转换为 torch 张量?

这是我的数据:

array([array([-0.4287  , -1.193   , -2.156   , -0.2264  , -1.978   , -1.101   ,   -3.395   ,  0.2974  ], dtype=float16),
   array([-0.3386 ,  1.398  , -1.083  ,  0.2961 , -0.7354 , -1.326  , -4.33   ,  0.6284 ], dtype=float16)], 
   dtype=object)

【问题讨论】:

  • 你能告诉我们一个小例子,你是如何尝试将 numpy 数组转换为 torch 张量的吗?这样我们就可以自己运行了?
  • pytorch 从对象 dtype 数组创建 tensor 时遇到问题我并不感到惊讶。那是一个数组数组——存储在内存中其他地方的数组。但它可能适用于data.tolist(),一个数组列表。或者使用np.stack(data) 将它们加入一个二维数组。这仅适用于组件数组具有相同形状的情况(如这里所示)。

标签: numpy pytorch


【解决方案1】:

很难正确回答,因为您没有向我们展示您是如何尝试做到的。从您的错误消息中,我可以看到您尝试将包含对象的 numpy 数组转换为火炬张量。这不起作用,您将需要一个数字数据类型:

import torch
import numpy as np

# Your test array without 'dtype=object'
a = np.array([
   np.array([-0.4287  , -1.193   , -2.156   , -0.2264  , -1.978   , -1.101   ,   -3.395   ,  0.2974  ], dtype=np.float16),
   np.array([-0.3386 ,  1.398  , -1.083  ,  0.2961 , -0.7354 , -1.326  , -4.33   ,  0.6284 ], dtype=np.float16)
])

print(a.dtype) # This should not be 'object'

b = torch.from_numpy(a)

print(b)

输出

float16
tensor([[-0.4287, -1.1934, -2.1562, -0.2264, -1.9775, -1.1006, -3.3945,  0.2974],
        [-0.3386,  1.3984, -1.0830,  0.2961, -0.7354, -1.3262, -4.3281,  0.6284]],
       dtype=torch.float16)

【讨论】:

  • 你的a 是一个元组。它不应该有dtype
  • 不,它不是一个元组。我添加了一些缩进,以便人们可以更清楚地看到它。
【解决方案2】:

只是添加到上面写的内容-

首先,您应该确保您的数组 dtype 不是“O”(对象)。

您可以通过以下方式执行此操作:(credit)

a=np.vstack(a).astype(np.float)

那么你可以使用:

b = torch.from_numpy(a)

【讨论】:

    猜你喜欢
    • 2020-07-06
    • 2019-10-05
    • 2020-09-17
    • 2021-04-13
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多