numpy与Tensor之间的转换
示例代码
import numpy as npfrom mindx.sdk.base
import Tensor
dtypes = [np.uint8,
np.int8,
np.int16,
np.uint16,
np.uint32,
np.int32,
np.int64,
np.uint64,
np.float16,
np.float32,
np.double,
bool] # 列举numpy的支持的数据类型
shape = [5, 4, 3, 2] # 创建数组格式为4维的数组
try:
for d in dtypes:
a = np.ones(shape, dtype=d) # 创建numpy数组,类型为d
t = Tensor(a) # 把numpy数组转换为Tensor对象
b = np.array(t) # 把Tensor对象转换为numpy数组
print(t.shape == shape) # 比较转换前后的数组格式
print((a == b).all()) # 比较转换前后的数组中的每一个元素
print(a.dtype == b.dtype) # 比较转换前后的数组的类型
except Exception as e:
print(e)
注意事项
Tensor数据结构接收了作为参数传进来的一段缓冲区内存地址,因此在使用numpy数组进行数据预处理并转为Tensor时,要注意预处理的过程中是否对内存进行修改。
例如:transpose()函数作用是调换数组的索引值,但是该函数实际未对数据内存地址进行重新排列,仅在获取numpy数组时返回转换后的值,如将该numpy数组转为Tensor,上述代码中print((a == b).all())的结果实际上会是False。(即numpy数组为transpose转置后数组,Tensor为transpose转置前数组。)
如需使用类似transpose()这样不改变内存排列的函数,可以在transpose()处理后使用ascontiguousarray()来重新排列内存数据,使得转换后的Tensor对象数据和期望得到的转置后数组一致。
父主题: 样例演示