MNN.Tensor
class Tensor
Tensor是MNN V2接口中的基础数据结构,是最基本的数据封装类型。Tensor存储了数据以及数据类型,形状等诸多信息,用户可以通过Tensor本身的函数获取这些信息。
MNN.Halide_Type_*
描述Tensor的数据类型
类型:
PyCapsule
枚举值:
Halide_Type_Double
Halide_Type_Float
Halide_Type_Int
Halide_Type_Int64
Halide_Type_String
Halide_Type_Uint8
MNN.Tensor_DimensionType_*
描述Tensor的数据排布格式
类型:
int
枚举值:
Tensor_DimensionType_Caffe
Tensor_DimensionType_Caffe_C4
Tensor_DimensionType_Tensorflow
Tensor()
创建一个空Tensor
参数:
None
返回:Tensor对象
返回类型:Tensor
Tensor(var)
创建一个Tensor,并使用var的数据
参数:
var:Var
类型为Var的变量
Tensor(tensor_or_var, dimension)
创建一个Tensor,并使用tensor_or_var的数据, 并将数据排布格式设置为dimension
参数:
tensor_or_var:Tensor/Var
类型为Tensor或者Var的变量dimension:MNN.Tensor_DimensionType_*
数据排布格式
Tensor(shape, dtype, dimension)
创建一个指定形状,数据类型和数据排布的Tensor, 数据未经初始化
参数:
shape:tuple
Tensor形状dtype:MNN.Halide_Type_*
Tensor数据类型dimension:MNN.Tensor_DimensionType_*
数据排布格式
Tensor(shape, dtype, value_list, dimension)
创建一个指定形状,数据类型, 数据和数据排布的Tensor, 数据拷贝自value_list
,
能够将list
,tuple
,bytes
,ndarray
,PyCapsule
,int指针
等格式的数据转换成Tensor
注意:value_list
仅在PYMNN_NUMPY_USABLE打开的情况下支持ndarray
,移动端默认关闭
此函数在PYMNN_NUMPY_USABLE=OFF
时不接受ndarray
作为数据输入
参数:
shape:tuple
Tensor形状dtype:MNN.Halide_Type_*
Tensor数据类型value_list:ndarray/tuple/list/bytes/PyCapsule/int_addr
数据dimension:MNN.Tensor_DimensionType_*
数据排布格式
getShape()
获取Tensor的形状。
参数:
None
返回:Tensor的数据形状
返回类型:Tuple
getDataType()
获取Tensor的数据类型。
参数:
None
返回:Tensor的数据类型
返回类型:MNN.Halide_Type_*
getDimensionType()
获取Tensor的持有的数据排布格式。
参数:
None
返回:Tensor
持有的数据排布格式
返回类型:MNN.Tensor_DimensionType_*
getData()
获取Tensor的数据。
参数:
None
返回:Tensor的数据
返回类型:Tuple
getHost()
获取Tensor的数据指针。
参数:
None
返回:Tensor内部数据的数据指针
返回类型:PyCapsule
, 可以参考PyCapsule介绍
copyFrom(from)
从from中拷贝数据到当前Tensor,可用此函数将数据拷贝到输入Tensor中。
参数:
from:Tensor
- 拷贝的源Tensor
返回:是否拷贝成功
返回类型:bool
copyToHostTensor(to)
从当前Tensor拷贝数据到to,可用此函数将输出Tensor中的数据拷出。
参数:
to:Tensor
- 拷贝的目标Tensor
返回:是否拷贝成功
返回类型:bool
getNumpyData()
获取Tensor的数据,返回numpy数据。 该API仅在PYMNN_NUMPY_USABLE=ON时生效,移动端默认关闭
参数:
None
返回:Tensor数据的numpy形式
返回类型:numpy.ndarray
Example
import numpy as _np
import MNN
import MNN.numpy as np
data = _np.array([1., 2., 3.], dtype=_np.float32)
# 创建Tensor
# 通过给定的tuple创建Tensor, 参数分别为:形状,数据类型,数据,数据排布格式
t1 = MNN.Tensor((1, 3), MNN.Halide_Type_Float, (1., 2., 3.), MNN.Tensor_DimensionType_Caffe)
# 通过Var创建Tensor
t2 = MNN.Tensor(np.array([1., 2., 3.])) # 与t1等价
# 通过ndarray创建Tensor
t3 = MNN.Tensor([1, 3], MNN.Halide_Type_Float, data, MNN.Tensor_DimensionType_Caffe)
# 通过bytes创建Tensor
t4 = MNN.Tensor([1, 3], MNN.Halide_Type_Float, data.tobytes(), MNN.Tensor_DimensionType_Caffe)
# 通过int类型的内存指针创建Tensor,使用该方法比直接用ndarray速度快,但是要求ndarray的内存必须连续
t5 = MNN.Tensor([1, 3], MNN.Halide_Type_Float, data.__array_interface__['data'][0], MNN.Tensor_DimensionType_Caffe)
print(t1.getShape()) # (1, 3)
print(t1.getDataType()) # <capsule object NULL at 0x7fe01e74ff30>
print(t1.getDimensionType()) # 1
print(t1.getData()) # (1.0, 2.0, 3.0)
print(t1.getHost()) # <capsule object NULL at 0x7fe01e5645a0>
print(t1.getNumpyData()) # [[1. 2. 3.]]