# 矩阵和数组


数组的创建、合并、重构、重新排列以及索引
数组是 Syslab 中信息和数据的基本表示形式。您可以构造常用的数组和网格、操作数组的形状和内容、访问数组元素,以及广播和矢量化函数,使其不仅能应用于标量,还能应用于数组中的每一个元素。

# 创建和合并数组

创建和合并数组
函数名 简介
Array 构造一个包含 T 类型元素的数组,可以指定维数和初始化数据
BitArray 节省空间的 N 维 Bool 数组
Vector 构造一个长度为 n 的未初始化的 Vector{T} 或用 nothing 或 missing 初始化
Base.vect 创建向量
Matrix 生成矩阵
zeros 创建全零数组
ones 创建全部为 1 的数组
rand 均匀分布的随机数
randn 生成一个随机数组,元素为标准正态分布,服从独立同分布
trues 逻辑 1(真)
falses 逻辑 0(假)
eye 单位矩阵
blkdiag 分块对角矩阵
fill 生成按照指定规则填充好的数组
fill! 使用给定对象填充数组
range 生成具有线性间隔元素的数组
circcopy! 复制数组
cat 串联数组
hcat 水平串联数组
vcat 垂直串联数组
hvcat 同时垂直和水平连接数组
repelem 重复数组元素副本
repeat 数组重复副本
reinterpret 生成与A具有相同二进制数据的数组
similar 生成一个与A具有相同类型(这里指的是密集,稀疏等)的未初始化数组,且具有指定的元素类型和维数(默认与A相同)
ty_hcat 空集和矩阵(向量)的横向拼接
ty_vcat 空集和矩阵(向量)的纵向拼接

# 创建网格

通过函数创建网格

创建网格

函数名 简介
LinRange 生成线性间距范围
logspace 生成 10 的指定幂间的向量,可指定向量长度
freqspace 频率响应的频率间距
meshgrid2 创建二维网格
meshgrid3 创建三维网格
ndgrid N 维空间中的矩形网格
StepRange 获取固定步长的范围值
UnitRange 获取步长为 1 的范围值

# 确定大小、形状和排序

确定矩阵或数组的大小、形状和排序

确定大小、形状和排序

函数名 简介
size 数组大小
msize 数组大小,与原生 size 函数不同,对于标量和向量,返回二维扩展大小,与 matlab 的 size 函数结果相同
ndims 数组维度数目
isscalar 确定输入是否为标量
isvector 确定输入是否为向量
ismatrix 确定输入是否为矩阵
isrow 确定输入是否为行向量
iscolumn 确定输入是否为列向量
isempty 确定数组是否为空
ty_issorted 确定数组是否已排序
issortedrows 确定矩阵或表的行是否已排序
accumulate 沿 A 的维度做累计 op 运算并返回结果
accumulate! 沿对象 A 的维度做累计 op 运算并将结果存入对象 B
eltype 返回数组或其他对象中元素的数据类型
stride 返回对象相邻指定粒度单位的距离(单位为元素数量)
strides 返回每个维度中内存步幅的Tuple(元组)

# 重构和重新排列

重构函数、对函数进行重新排列

重构和重新排列

函数名 简介
sort 排序,创建副本
sort! 排序,不创建副本
ty_sort 对数组元素排序
sortrows 对矩阵行或表行进行排序
partialsort 按照指定的顺序进行局部排序,并返回排序后索引的值,原数据的值不会被修改
partialsort! 按照指定的顺序进行局部排序,并返回排序后索引的值,原数据的值修改为排序后的值
reverse 对数据进行翻转,创建副本
reverse! 对数据进行翻转,不创建副本
rotr90 将数组顺时针旋转 90 度
rotl90 将数组逆时针旋转 90 度
rot180 将数组旋转180度
transpose 转置向量或矩阵
' 复共轭转置
permutedims 变换数组的维度
permutedims! 变换数组的维度并存储到指定数组
ipermutedims 逆置换数组的维度
mapslices 使用函数 f 转换数组 A 的给定维度
promote_shape 提升维度
circshift 循环平移数组,创建副本
circshift! 循环平移数组,不创建副本
shiftdim 移动数组维度
reshape 重构数组
squeeze 删除长度为 1 的维度
invperm 返回 v 的逆排列
isperm 如果 v 是有效排列,则返回 true

# 索引

通过指定数组元素的索引或检查元素是否满足条件来访问数组的元素

索引

函数名 简介
colon,: 向量、数组下标和 for 循环迭代
end 终止代码块或指示最大数组索引
ind2sub 将线性索引转换为下标
sub2ind 将下标转换为线性索引
partialsortperm 按照指定的顺序进行局部排序,返回排序前索引
partialsortperm! 按照指定的顺序进行局部排序,返回排序前索引
reverseind 根据翻转之后的索引号,获取翻转之前的索引号
searchsorted 按照指定的顺序返回相应索引范围
searchsortedfirst 返回向量中大于或等于x的第一个值的索引
searchsortedlast 返回向量中小于或等于x的最后一个值的索引
sortperm 根据排序规则,获取索引
sortperm! 根据排序规则,获取索引
CartesianIndex 笛卡尔坐标索引
findall 在指定域内查找目标内容并返回所有匹配的索引
findfirst 在指定域内查找目标内容并返回最先匹配的索引
findlast 在指定域内查找目标内容并返回最后匹配的索引
findnext 在指定域内查找目标内容并返回给定索引后的下一匹配的索引
findprev 在指定域内查找目标内容并返回给定索引后的上一匹配的索引
eachcol 创建一个迭代向量或矩阵的列的生成器,并以向量形式返回每列
eachindex 一个返回 A 中每个位置的高效迭代器
eachrow 创建一个迭代向量或矩阵的行的生成器,并以向量形式返回每行
eachslice 创建一个迭代对于向量或矩阵指定维度切片的生成器,并以向量形式返回每个切片
LinearIndices 一维线性坐标

# 广播与矢量化

广播函数与表达式逐元素遍历调用

广播与矢量化

函数名 简介
@__dot__ 点调用,将表达式逐元素遍历调用
@. 点调用,将表达式逐元素遍历调用
broadcast 广播函数
broadcast! 广播函数
broadcastable 返回支持轴,索引,多维的原对象或相似对象
Broadcast.combine_axes 确定用于广播中所有值的结果轴
Broadcast.combine_styles 确定用于任意数量的值参数的 BroadcastStyle
Broadcast.result_style 确定两个 BroadcastStyle 的公共样式