稀疏数组:线性代数

许多大型的线性代数的应用涉及到含有很多元素的矩阵,但是这些元素中很少是非零的. 在 Mathematica 中可以使用 SparseArray 对象有效地表示这些稀疏矩阵,这在 "稀疏数组:操作列表" 中讨论. SparseArray 对象是通过用规则列表指定非零数值出现的地方来工作的.

SparseArray[list]一个普通列表的 SparseArray 形式
SparseArray[{{i1,j1}->v1,{i2,j2}->v2,...},{m,n}]
一个 m×n 稀疏数组,其元素 具有数值
SparseArray[{{i1,j1},{i2,j2},...}->{v1,v2,...},{m,n}]
同样的稀疏数组
Normal[array]相应于一个 SparseArray 的普通列表

指定稀疏数组.

就像在 "稀疏数组:操作列表" 中讨论的,可以使用模式来指定稀疏矩阵中的元素集合. 也可以得到和任意阶的张量相应的稀疏数组.

这里产生一个 50×50 稀疏数值矩阵,有148个非零的元素.
In[1]:=
Click for copyable input
Out[1]=
这里是该矩阵元素的视觉效果.
In[2]:=
Click for copyable input
Out[2]=
这里是该矩阵的最大的四个特征值.
In[3]:=
Click for copyable input
Out[3]=
Dot 给出一个 SparseArray 结果.
In[4]:=
Click for copyable input
Out[4]=
可以像在一个普通数组中一样提取部分.
In[5]:=
Click for copyable input
Out[5]=

可以将大多数的标准结构运算直接应用于 SparseArray 对象,就像操作普通列表一样. 当结果稀疏时,它们通常返回 SparseArray 对象.

Dimensions[m]数组的维数
ArrayRules[m]对于数组中非零元素的规则
m[[i,j]]元素 i, j
m[[i]]i
m[[All,j]]j
m[[i,j]]=v重新设置元素 i, j

可以直接应用于 SparseArray 对象的几个结构运算.

这给出 的第一列. 它只有2个非零的元素.
In[6]:=
Click for copyable input
Out[6]=
这把3与 第一列中的每一个元素相加.
In[7]:=
Click for copyable input
Out[7]=
现在第一列中的所有元素都不为零.
In[8]:=
Click for copyable input
Out[8]=
这给出第二行上非零元素的规则.
In[9]:=
Click for copyable input
Out[9]=
SparseArray[rules]根据规则产生稀疏数组
CoefficientArrays[{eqns1,eqns2,...},{x1,x2,...}]
从方程中获得系数的数组
Import["file.mtx"]从文件中导入稀疏数组

获得稀疏数组的通常方法.

这产生三对角线随机矩阵.
In[10]:=
Click for copyable input
Out[10]=
甚至该矩阵的第十次幂也仍然很稀疏.
In[11]:=
Click for copyable input
Out[11]=
这以稀疏数组提取系数.
In[12]:=
Click for copyable input
Out[12]=
这里是相应的普通数组.
In[13]:=
Click for copyable input
Out[13]=
这重现原来的形式.
In[14]:=
Click for copyable input
Out[14]=
CoefficientArrays 可以处理一般的多项式方程.
In[15]:=
Click for copyable input
Out[15]=
二次部分的系数以一个3阶张量的形式给出.
In[16]:=
Click for copyable input
Out[16]=
这重现原来的形式.
In[17]:=
Click for copyable input
Out[17]=

对于机器精度数值稀疏矩阵,Mathematica 支持标准的文件格式,例如 Matrix Market (.mtx) 和 Harwell-Boeing. 可以用 ImportExport 以这些格式导入和导出矩阵.

New to Mathematica? Find your learning path »
Have a question? Ask support »