问题记录
我有一个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)))