2.2.1 张量运算

AOE可完成张量运算,使用张量形式进行计算,可以使表达式更为简洁。

一、基本运算规则

  1. 动作类型选择为“SET_POINTS2”或“SET_POINTS_WITH_CHECK2”,详细内容见AOE动作类型
  2. 张量的组成元素可为常数或者变量。
  3. 张量赋值通过冒号:或等号=实现(推荐使用冒号:),赋值顺序为赋值号右边的张量按元素顺序赋值给左边张量对应元素,要求赋值号两边张量维数相同。
  4. 张量运算支持张量四则运算、幂运算等,张量元素运算支持前述表格中所有运算。
  5. 可在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的元素