2.2.1 张量运算
AOE可完成张量运算,使用张量形式进行计算,可以使表达式更为简洁。
一、基本运算规则
- 动作类型选择为“SET_POINTS2”或“SET_POINTS_WITH_CHECK2”,详细内容见AOE动作类型。
- 张量的组成元素可为常数或者变量。
- 张量赋值通过冒号
:
或等号=
实现(推荐使用冒号:
),赋值顺序为赋值号右边的张量按元素顺序赋值给左边张量对应元素,要求赋值号两边张量维数相同。 - 张量运算支持张量四则运算、幂运算等,张量元素运算支持前述表格中所有运算。
- 可在AOE策略文件配置的变量初始值中,事先定义变量来表示张量,后续运算可直接用变量替代张量。 如“var:[a1,a2];”,后续动作“var:[123,234];”表示a1赋值为123,a2赋值为234;“[a3,a4]:var;”表示a3:a1、a4:a2。
相关示例如下:
#示例1:简单四则运算
[a1,a2]:([1,2]+[15,10])*[10,10]+[1,2];
#示例2:多种运算混合
[a3,a4]:[1>0,1&0];
[a5,a6]:[a9^2,a10==2];
[a7,a8]:[t1,t2]*[10,10]*[10,10]+[1,1];
#示例3:幂运算
[a9,a10]:[a11,a12]^3;
二、内置函数
AOE内置多种常用的张量运算函数,其具体功能及使用方法如下表所示。
函数 | 功能 |
---|---|
size(A) | 返回包含矩阵A各维度长度的向量 |
size(A,dim) | 返回矩阵A在dim维度的长度 |
A(i, j) | 取出矩阵A的第i行第j列元素,i、j可为向量表示多行、多列 |
A(i, :) | 取出矩阵A的第i行 |
A(:, i) | 取出矩阵A第i列 |
[A, B] | 若矩阵A、B行数相同,矩阵按行组合 |
[A; B] | 若矩阵A、B列数相同,矩阵按列组合 |
1:n | 建立值为1,2,…,n的列矩阵 |
k:m:n | 建立值为k, k+m, k+2m,…,k+lm的列矩阵,其中k+lm≤n,k+(l+1)m>n |
ones(n, m) | 建立行数、列数为n×m的矩阵,各元素值为1 |
zeros(n, m) | 建立行数、列数为n×m的矩阵,各元素值为0 |
eye(n) | 建立n阶单位矩阵 |
S=sparse(i,j,v,m,n) | 利用i,j,v三元组建立大小为m×n的稀疏矩阵,S(i(k),j(k))=v(k),向量i、j、k的元素数量需相等 |
max(A) | 取出矩阵A最大元素 |
min(A) | 取出矩阵A最小元素 |
find(A) | 返回矩阵A非零元元素序号构成的向量 |
find(b(A)) | 返回通过逻辑表达式b运算值为真的矩阵A元素序号构成的向量 |
f(A) | 对矩阵中每个元素分别执行初等函数、取共轭、求模、取实部、取虚部、求相角等f函数运算,得到新的矩阵 |
find_nearest_pos(A,x) | 找矩阵A中数值最接近x的元素的位置 |
find_nearest(A,x) | 找矩阵A中数值最接近x的元素 |
slice(a,b) | 取矩阵A中索引b的元素 |