expr.Var
class Var
Var是MNN V3及表达式接口中的基础数据结构,是对数据和表达式的封装类型。Var存储了计算表达式,数据以及数据类型,形状等诸多信息,用户可以通过Var本身的函数获取这些信息。
在numpy和cv接口中,Var的作用等价于numpy.ndarray
。
expr.dtype
描述Var的数据类型
类型:
Enum
枚举值:
double
float
int
int64
uint8
expr.data_format
描述Var的数据排布格式
类型:
Enum
枚举值:
NCHW
NC4HW4
NHWC
Var()
使用expr.const
或MNN.numpy.array
创建Var
不要使用Var()来创建Var的变量,应该使用expr/numpy中提供的函数来创建Var
valid
该Var是否有效,如果无效,则不能使用, 作为表达式输入异常或无效的表达式的输出,Var都是无效的
返回:Var的数据形状
返回类型:[int]
shape
获取Var的形状
返回:Var的数据形状
返回类型:[int]
data_format
获取Var的数据排布格式
属性类型:只读
类型:expr.data_format
dtype
获取Var的数据类型
属性类型:只读
类型:expr.dtype
size
获取Var的元素个数
属性类型:只读
类型:int
name
获取Var的名称
属性类型:只读
类型:str
ndim
获取Var的维度数量
属性类型:只读
类型:int
ptr
获取Var的数据指针
属性类型:只读
类型:PyCapsule
op_type
获取Var对应表达式的Op类型
属性类型:只读
类型:str
fix_as_placeholder()
将Var作为Placeholder,执行该函数后可以对该变量执行写操作
注意:表达式中使用,numpy数值计算时勿使用
参数:
None
返回:None
返回类型:None
fix_as_const()
将Var作为Const,执行该操作会立即计算出该变量的值并设置为常量
注意:表达式中使用,numpy数值计算时勿使用
参数:
None
返回:None
返回类型:None
fix_as_trainable()
将Var作为Trainable,执行该操作会将该变量设置为可训练变量
注意:表达式中使用,numpy数值计算时勿使用
参数:
None
返回:None
返回类型:None
close()
将Var的输入设置为空
注意:表达式中使用,numpy数值计算时勿使用
参数:
None
返回:None
返回类型:None
copy_from(src)
将src设置为Var的输入
注意:表达式中使用,numpy数值计算时勿使用
参数:
src:Var
源变量
返回:None
返回类型:None
set_inputs(inputs)
将inputs设置为Var的输入
注意:表达式中使用,numpy数值计算时勿使用
参数:
inputs:[Var]
源变量
返回:None
返回类型:None
replace(src)
使用src替换掉该Var
注意:表达式中使用,numpy数值计算时勿使用
参数:
src:Var
替换变量
返回:None
返回类型:None
reorder(format)
将Var的数据排布格式设置为format
注意:表达式中使用,numpy数值计算时勿使用
参数:
format:expr.data_format
数据排布格式
返回:None
返回类型:None
resize(shape)
将Var的形状设置为shape
注意:表达式中使用,numpy数值计算时勿使用
参数:
shape:[int]
形状
返回:None
返回类型:None
read()
读取Var的数据,返回numpy.ndarray数据
注意:该API仅在PYMNN_NUMPY_USABLE打开的情况下有效,移动端默认关闭
参数:
None
返回:Var数据的numpy形式
返回类型:numpy.ndarray
read_as_tuple()
读取Var的数据,返回tuple数据
参数:
None
返回:Var数据的tuple形式
返回类型:tuple
write(data)
将data中的数据写入Var,data可以是numpy.ndarray或tuple类型
注意:该函数在使用numpy
时经常被用作ndarray->Var
的转换函数,在使用MNN.numpy
时不需要使用该函数
参数:
data:tuple|ndarray
待写入数据
返回:None
返回类型:None
all(axis)
Var中指定轴的数据是否全不为0,相当于: for x in data: res &= x
要求Var的数据类型为int32
参数:
axis:[int]
指定的轴,默认为[-1]
返回:True
全不为0,False
包含0
返回类型:bool
any(axis)
Var中指定轴的数据是否至少有一个数据不为0,相当于: for x in data: res |= x
要求Var的数据类型为int32
参数:
axis:[int]
指定的轴,默认为[-1]
返回:True
至少有一个数据不为0,False
全部为0
返回类型:bool
argmax(axis)
返回Var中指定轴的最大值的索引
参数:
axis:[int]
指定的轴,默认为[-1]
返回:最大值的索引
返回类型:int
argmin(axis)
返回Var中指定轴的最小值的索引
参数:
axis:[int]
指定的轴,默认为[-1]
返回:最小值的索引
返回类型:int
sort(axis)
将Var按照axis的方向排序
参数:
axis:int
排序的轴,默认为[-1]
返回:排序后的Var
返回类型:Var
argsort(axis)
返回排序后各元素对应的位置
参数:
axis:[int]
排序的轴,默认为[-1]
返回:元素的对应顺序
返回类型:Var
astype(type)
将Var的数据类型设置为type
参数:
type:expr.dtype
数据类型
返回:数据类型为type的变量
返回类型:Var
copy()
返回一个拷贝的Var
参数:
None
返回:一个拷贝的Var
返回类型:Var
dot(b)
返回Var与b的点积
参数:
b:Var
另一个变量
返回:Var与b的点积
返回类型:Var
fill(value)
将Var的数据全部设置为value
参数:
value:scalar
填充值
返回:全部设置为value的变量
返回类型:Var
flatten()
将Var的数据展平,相当于 reshape(-1)
参数:
None
返回:展平的变量
返回类型:Var
max(axis)
返回Var指定轴的最大值
参数:
axis:[int]
指定的轴,默认为[-1]
返回:最大值
返回类型:float
mean(axis)
返回Var指定轴的均值
参数:
axis:[int]
指定的轴,默认为[-1]
返回:均值
返回类型:float
min()
返回Var中最小值
参数:
None
返回:最小值
返回类型:float
nonzero()
返回Var中不为0的元素的坐标
参数:
None
返回:不为0的元素的坐标
返回类型:(Var,)
prod()
返回Var的乘积
参数:
None
返回:乘积
返回类型:float
ptp()
返回Var的最大值与最小值的差
参数:
None
返回:最大值与最小值的差
返回类型:float
ravel()
返回Var的数据展平,相当于 reshape(-1)
参数:
None
返回:展平的变量
返回类型:Var
repeat(num)
将Var重复num次
参数:
num:int
重复次数
返回:重复num次的变量
返回类型:Var
reshape(shape)
将Var的数据reshape为shape
参数:
shape:[int]
新的形状
返回:形状为shape的变量
返回类型:Var
squeeze(axis)
将Var中指定轴且维度为1的维度移除
参数:
axis:[int]
要移除的轴, 默认为[-1]
返回:移除维度为1的变量
返回类型:Var
round()
将Var的数据四舍五入
参数:
None
返回:四舍五入的变量
返回类型:Var
sum(axis)
返回Var指定轴的和
参数:
axis:[int]
指定的轴, 默认为[-1]
返回:和
返回类型:Var
var(axis)
返回Var指定轴的方差
参数:
axis:[int]
指定的轴, 默认为[-1]
返回:标准差
返回类型:Var
std(axis)
返回Var指定轴的标准差
参数:
axis:[int]
指定的轴, 默认为[-1]
返回:标准差
返回类型:Var
swapaxes(axis1, axis2)
将Var的指定轴交换
参数:
axis1:int
指定的交换轴axis2:int
指定的交换轴
返回:交换后的变量
返回类型:Var
transpose(axes)
将Var转置
参数:
axes:[int]
转置的轴顺序,默认为None
, 将轴逆序排列
返回:转置后的变量
返回类型:Var
item(idx)
返回Var的第idx个元素,类似:var[idx]
参数:
idx:int
元素的索引
返回:元素的值
返回类型:Var
number_overload
+
-
*
/
%
**
abs()
compare_overload
==
!=
<
<=
>
>=
sequence_overload
__iter__
,__iternext__
可以通过for item in var
遍历Var__len__
返回最高维度的长度__subscript__
int
如:x[0]
[int]
如:x[[0,2]]
Var
数据类型为int或bool,如:x[x > 0]
PySlice
如:x[:, 2], x[0:10:-1]
__ass_subscript__
与__subscript__
相同,是赋值操作
str_overload
__repr__
,__str__
在支持numpy的环境中打印格式与numpy一致,否则以tuple形式打印
not_impl_overload
float(var)
max(var1, var2)
if var:
注意:以上均为未定义行为,请勿使用!!!
Example
import MNN.expr as expr
import MNN.numpy as np
# 创建Var变量
# 通过expr.const创建变量,参数分别为:数据,形状,数据排布,数据类型
x = expr.const([1., 2., 3., 4.], [2, 2], F.NCHW, F.float) # array([[1., 2.], [3., 4.]], dtype=float32)
# 通过numpy.array创建变量,直接传入数据即可
y = np.array([2, 0]) # array([2, 0], dtype=int32)
# 通过numpy.ones创建变量,指定参数为形状
z = np.ones([4]) # array([1, 1, 1, 1], dtype=int32)
# Var的属性
x.shape # [2, 2]
x.size # 4
x.ndim # 2
x.dtype # dtype.float
x.data_format # data_format.NCHW
x.op_type # 'Const'
# 形状变化
x1 = x.reshape(1, 4) # array([[1., 2., 3., 4.]], dtype=float32)
x2 = x.transpose() # array([[1., 3.], [2., 4.]], dtype=float32)
x3 = x.flatten() # array([1., 2., 3., 4.], dtype=float32)
# 运算符重载
x4 = x3 + z # array([3., 5., 7., 9.], dtype=float32)
x5 = x3 > z # array([0, 1, 1, 1], dtype=int32)
# 数学函数
x.max() # 4.0
x.std() # 1.1180340051651
x.sum() # 10.0
# 元素操作,可以通过索引、切片、迭代等方式进行操作
x[0] # array([1., 2.], dtype=float32)
x[0, 1] # 2.0
x[:, 0] # array([1., 3.], dtype=float32)
x.item(1) # 2.0
len(x) # 2
for item in x:
print(item) # array([1., 2.], dtype=float32); array([3., 4.], dtype=float32)
# 数据类型转换:到ndarray, tuple, scalar
np_x = x.read() # array([[1., 2.], [3., 4.]], dtype=float32)
type(np_x) # <class 'numpy.ndarray'>
tuple_x = x.read_as_tuple() # (1.0, 2.0, 3.0, 4.0)
type(tuple_x) # <class 'tuple'>
scalar_x = x[0, 1] # 1.0
type(scalar_x) # <class 'float'>