# 矩阵和数组
数组的创建、合并、重构、重新排列以及索引
数组是 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 | 空集和矩阵(向量)的纵向拼接 |
# 创建网格
通过函数创建网格
创建网格
# 确定大小、形状和排序
确定矩阵或数组的大小、形状和排序
确定大小、形状和排序
| 函数名 | 简介 |
|---|---|
| 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 的公共样式 |