操作列表
Range[n] | 列表 {1,2,3,…,n} |
Table[expr,{i,n}] | i 从 1 到 n 的 expr 的值 |
Array[f,n] | 列表 {f[1],f[2],…,f[n]} |
NestList[f,x,n] | 具有 n 个嵌套的{x,f[x],f[f[x]],…} |
Normal[SparseArray[{i1->v1,…},n]] | 长度为 n 的列表,元素 ik 为 vk |
Apply[List,f[e1,e2,…]] | 列表 {e1,e2,…} |
SparseArray 帮助用户在特定位置指定值:
Table[expr,{i,list}] | 当 i 从 list 中取值时, expr 的值 |
Map[f,list] | 对 list 的每个元素应用 f |
MapIndexed[f,list] | 对于第 i 个元素,给出 f[elem,{i}] |
Cases[list,form] | 给出与 form 匹配的 list 的元素 |
Select[list,test] | 选出 test[elem] 为 True 的元素 |
Pick[list,sel,form] | 选出 list 的元素,sel 相应的元素与 form 匹配 |
TakeWhile[list,test] | |
list[[{i1,i2,…}]] or Part[list,{i1,i2,…}] | |
给出 list 指定部分的列表 |
Part[list,spec] or list[[spec]] | 列表的一个或多个部分 |
Part[list,spec1,spec2,…] or list[[spec1,spec2,…]] | 嵌套列表的一个或多个部分 |
n | 开头的第 n 个部分 |
-n | 末尾的第 n 个部分 |
{i1,i2,…} | 由部分组成的列表 |
m;;n | 第 m 部分到第 n 部分 |
All | 所有部分 |
可以使用 ;; 来指定给定范围内所有索引:
有时,把一个嵌套列表想象为在空间的展开是有益的,这时,每个元素都是在由其索引所提供的坐标位置上. 对于list[[spec1,spec2,…]],存在直接的几何解释. 如果一个给定的 speck 是一个单一的整数,那么表示在第 k 维提取单一的分块,而如果是一个列表的话,表示提取平行分块的列表. 那么 list[[spec1,spec2,…]] 的最终结果是在每个连续纬度上分块所得到的元素集合.
Part[list,{i1,i2,…}] | 列表 {list[[i1]],list[[i2]],…} |
Extract[list,{i1,i2,…}] | 元素 list[[i1,i2,…]] |
Part[list,spec1,spec2,…] | 由连续分片指定的部分 |
Extract[list,{{i1,i2,…},{j1,j2,…},…}] | 单一部分{list[[i1,i2,…]],list[[j1,j2,…]],…} 的列表 |
Take[list,spec] | 选出列表的指定部分 |
Drop[list,spec] | 丢弃列表的指定部分 |
Take[list,spec1,spec2,…] , Drop[list,spec1,spec2,…] | 在嵌套列表的每一层选出或丢弃指定部分 |
n | 前 n 个元素 |
-n | 最后 n 个元素 |
{n} | 仅含元素 n |
{m,n} | 元素 m 到 n (闭区间) |
{m,n,s} | 元素 m 到 n,步长为 s |
All | 所有部分 |
None | 没有部分 |
Prepend[list,elem] | 在 list 的开头加入 element |
Append[list,elem] | 在 list 的末尾加入 element |
Insert[list,elem,i] | 在位置 i 插入 element |
Insert[list,elem,{i,j,…}] | 在位置 {i,j,…} 插入 |
Delete[list,i] | 在位置 i 删除元素 |
Delete[list,{i,j,…}] | 在位置 {i,j,…} 删除 |
ReplacePart[list,i->new] | 用 new 替换 list 中位置 i 上的元素 |
ReplacePart[list,{i,j,…}->new] | 用 new 替换 list[[i,j,…]] |
ReplacePart[list,{i1->new1,i2->new2,…}] | 用 newn 替换位置 in 上的部分 |
ReplacePart[list,{{i1,j1,…}->new1,…}] | 用 newn 替换位置 {in,jn,…} 上的部分 |
ReplacePart[list,{{i1,j1,…},…}->new] | 用 new 替换所有部分 list[[ik,jk,…]] |
{list1,list2,…} | 列表的列表 |
Table[expr,{i,m},{j,n},…] | 由 expr 的值构成的 m×n×… 表格 |
Array[f,{m,n,…}] | 由 f[i,j,…] 的值构成的 m×n×… 数组 |
Normal[SparseArray[{{i1,j1,…}->v1,…},{m,n,…}]] | |
m×n×… 数组,元素 {is,js,…} 为 vs | |
Outer[f,list1,list2,…] | 对与 f 结合的元素进行的一般外层求积操作 |
Tuples[list,{m,n,…}] | 由 list 得到的元素组成的所有 m×n×… 数组 |
Dimensions[list] | 完全数组的维度 |
ArrayQ[list] | 测试在给定层上的所有子列表是否具有相同长度 |
ArrayDepth[list] | 所有子列表具有相同长度 |
Wolfram 语言可以处理任意嵌套列表. 列表没有必要形成一个完全数组. 使用 Table 可以很容易地形成不规则的数组.
Flatten[list] | 压平 list 的所有层 |
Flatten[list,n] | 压平前 n 层 |
ArrayFlatten[list,rank] | 从由数组构成的数组构建压平的数组 |
Flatten 根据索引的字典顺序放置元素:
Map[f,list,{n}] | 在第 n 层上对所有元素进行 f 映射 |
Apply[f,list,{n}] | 对第 n 层上的所有元素应用 f |
MapIndexed[f,list,{n}] | 在第 n 层上的部分元素以及索引上映射 f |
Partition[list,{n1,n2,…}] | 分成 n1×n1×… 的块 |
PadLeft[list,{n1,n2,…}] | 在左边填充以生成一个 n1×n1×… 数组 |
PadRight[list,{n1,n2,…}] | 在右边填充以生成一个 n1×n1×… 数组 |
RotateLeft[list,{n1,n2,…}] | 在第 k 层向左轮换 nk 个位置 |
RotateRight[list,{n1,n2,…}] | 在第 k 层向右轮换 nk 个位置 |
Partition[list,n] | 把 list 分为长度为 n 的子列表 |
Partition[list,n,d] | 使用偏移量 d 划分子列表 |
Split[list] | 把 list 分成相同元素的子列表 |
Split[list,test] | 分成相邻元素满足 test 的子列表 |
Partition 遍历一个列表,并把相邻的元素分成子列表. 默认情况下,没有包含任何令原列表悬空的子列表.
用户可以告诉 Partition 包含令原列表末尾悬空的子列表. 默认情况下,通过周期性地处理原来的列表,可以填入其他额外的元素. 也可以根据用户指定的元素进行填充.
Partition[list,n,d] or Partition[list,n,d,{1,-1}] | 只保留没有悬空的子列表 |
Partition[list,n,d,{1,1}] | 允许在末尾有悬空 |
Partition[list,n,d,{-1,-1}] | 允许在开头有悬空 |
Partition[list,n,d,{-1,1}] | 允许在开头和末尾都有悬空 |
Partition[list,n,d,{kL,kR}] | 指定第一个和最后一个子列表的对齐 |
Partition[list,n,d,spec] | 通过在 list 中周期性地重复元素进行填充 |
Partition[list,n,d,spec,x] | 通过重复元素 x 填充 |
Partition[list,n,d,spec,{x1,x2,…}] | |
通过周期性地重复 xi 填充 | |
Partition[list,n,d,spec,{}] | 不使用填充 |
PadLeft[list,n] | 通过在左边插入零进行填充,以达到长度 n |
PadLeft[list,n,x] | 通过重复元素 x 进行填充 |
PadLeft[list,n,{x1,x2,…}] | 通过周期性地重复 xi 进行填充 |
PadLeft[list,n,list] | 通过周期性地重复 list 进行填充 |
PadLeft[list,n,padding,m] | 在右边留出 m 个元素大小的空白 |
PadRight[list,n] | 在右边插入零进行填充 |
在 Wolfram 语言中,列表通过给出元素的明确集合来指定. 但是当处理大型数组时,能够指明特定位置处的元素值,并将其余元素指定为默认值,常常是有用的. 在 Wolfram 语言中可以使用 SparseArray 对象实现.
{e1,e2,…} , {{e11,e12,…},…}, … | 普通列表 |
SparseArray[{pos1->val1,pos2->val2,…}] | |
稀疏数组 |
SparseArray[list] | list 的稀疏数组版本 |
SparseArray[{pos1->val1,pos2->val2,…}] | |
在位置 posi 上值为 vali 的稀疏数组 | |
SparseArray[{pos1,pos2,…}->{val1,val2,…}] | |
同样的稀疏数组 | |
SparseArray[Band[{i,j}]->val] | 值为 val 的带状稀疏矩阵 |
SparseArray[data,{d1,d2,…}] | d1×d2×… 稀疏数组 |
SparseArray[data,dims,val] | 默认值为 val 的稀疏数组 |
Normal[array] | array 的普通列表版本 |
ArrayRules[array] | array 的位置值规则 |
SparseArray 的重要特征是用户指定的位置可以是模式.
为了许多不同的目的,Wolfram 系统用类似其所对应的普通列表的处理方式处理 SparseArray 对象. 因此,例如,如果用户要求一个稀疏数组对象的部分元素,Wolfram 系统将用类似在对应的普通列表中获取部分元素的方式进行.
许多操作用类似普通列表的方式处理 SparseArray 对象. 在可能的情况下,他们给出稀疏矩阵作为结果.
Dot 直接对稀疏数组对象进行操作:
Wolfram 系统用具有头部 SparseArray 的表达式表示稀疏数组. 当计算一个稀疏数组的时候,就自动转换为具有结构 SparseArray[Automatic,dims,val,…] 的优化标准形式.
Length 给出对应的普通列表的长度:
Map 也对单个数值进行操作: