问题记录
我有一个numpy.ndarray类型的数组,数组里面的数据是tensor类型,现在我想将这个数组转化为tensor类型,然后报错了,代码和报错截图如下: 代码及代码运行截图:
import numpy as np
import torch
a = torch.tensor([1, 1, 1])
b = torch.tensor([2, 2, 2])
c = np.array([a, b])
print("print the c: \n {}\n".format(c))
print("c's type is {}".format(type(c)))
d = torch.tensor(c)
print("print the d: \n {}\n".format(d))
print("d's type is {}".format(type(d)))
 报错截图:  错误原因解释:就是numpy数据类型里只有float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, bool,没有tensor类型,所以出错了。一般而言,只要对数组里的数据进行强制转换,转换为float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, bool中的任意一种都行,可以参考这篇文章 异常can’t convert np.ndarray of type numpy.object_.。但不适用我们这次的问题。
解决方法
如果有大神晓得其他方法,并且能在评论区告诉我的话,那就真的感激不尽啦!
方法一:蠢方法
用了蠢方法,先遍历将numpy.ndarray数组里的元素全部转换为numpy.ndarray类型,也就是我将数组里的tensor类型数据转换为了numpy.ndarray类型,然后再使用torch.tensor命令进行转换,嗯,然后就成功了。 代码及代码运行截图:
import numpy as np
import torch
a = torch.tensor([1, 1, 1])
b = torch.tensor([2, 2, 2])
c = np.array([a, b])
print("print the c: \n {}\n".format(c))
print("c's type is {}".format(type(c)))
c = [val.numpy() for val in c] # 改动在这里,将tensor转换为了numpy
d = torch.tensor(c)
print("print the d: \n {}\n".format(d))
print("d's type is {}".format(type(d)))

方法二:还可以的方法
先将numpy.ndarray数组转换为list类型,再使用torch.stack命令进行转换,嗯,然后也成功了。 代码及代码运行截图:
import numpy as np
import torch
a = torch.tensor([1, 1, 1])
b = torch.tensor([2, 2, 2])
c = np.array([a, b])
print("print the c: \n {}\n".format(c))
print("c's type is {}".format(type(c)))
d = torch.stack(list(c)) # 在这里改动了
print("print the d: \n {}\n".format(d))
print("d's type is {}".format(type(d)))

参考文献
- 异常can’t convert np.ndarray of type numpy.object_.
|