How to| 创建矩阵

矩阵在 Mathematica 中用列表表示. 它们可以用{ } 符号直接输入、由一个公式创建或者从一个数据文件中导入. Mathematica 还有各种创建对角矩阵、常数矩阵和其它特殊矩阵类型的命令.

矩阵可以直接用 符号输入:

In[125]:=
Click for copyable input
Out[125]=

可以使用 MatrixForm 将结果用矩阵符号表示:

In[126]:=
Click for copyable input
Out[126]//MatrixForm=

是输入 的另一种方式. 当 为格式化函数时,这会很方便.

这里用 Table 创建一个 值的网格.

In[127]:=
Click for copyable input
In[129]:=
Click for copyable input
Out[129]//MatrixForm=

注意 Mathematica 中的矩阵并不只限于包含数字;它们可以包含任何符号项,例如公式:

In[130]:=
Click for copyable input
Out[131]//MatrixForm=
    

当您创建一个矩阵并用一个赋值式保存时,注意不要使用 MatrixForm 与格式化结合. 使用圆括号:

In[132]:=
Click for copyable input
Out[132]//MatrixForm=

可以在后继计算中使用

In[133]:=
Click for copyable input
Out[133]//MatrixForm=

假设您不使用圆括号:

In[134]:=
Click for copyable input
Out[134]//MatrixForm=

的输出将与一个矩阵相似,但不会像一个矩阵一样进行计算. 例如,下式将不执行矩阵的乘法运算:

In[135]:=
Click for copyable input
Out[135]=

您可以使用 FullForm 检查 的值:

In[11]:=
Click for copyable input
Out[11]//FullForm=

这表明 还包括格式化包装 MatrixForm,这层包装使得它不再像矩阵一样工作.

    

有一些函数来创建各种特殊类型的矩阵.

这里创建一个由 之间的实数值组成的 4×5 矩阵:

In[136]:=
Click for copyable input
Out[136]//MatrixForm=

创建一个仅在对角线上具有非零项的矩阵:

In[137]:=
Click for copyable input
Out[137]//MatrixForm=

创建一个所有项全部相同的矩阵:

In[138]:=
Click for copyable input
Out[138]//MatrixForm=

这里创建一个4×4 Hilbert 矩阵;各项均为 的形式:

In[139]:=
Click for copyable input
Out[139]//MatrixForm=
    

许多线性代数和其它函数返回矩阵.

这里计算一个 3×3 随机矩阵的 QR 分解:

In[140]:=
Click for copyable input

将 Q 矩阵输出:

In[142]:=
Click for copyable input
Out[142]//MatrixForm=

Mathematica 函数返回矩阵时,它们往往采用一种称作压缩数组的优化存储格式.

    

您可以将 Mathematica 中的许多常见运算应用于列表,然后得到另一个列表,并将函数映射在各个元素上. 这同样适用于矩阵,它们是列表的列表.

这是一个 2×2 方阵:

In[143]:=
Click for copyable input
Out[144]//MatrixForm=

Sqrt 应用于矩阵的各个元素:

In[145]:=
Click for copyable input
Out[145]//MatrixForm=

Sqrt 的这种行为被称作可列表性,它使代码非常高效并具有可读性.

如果函数不具有可列表性,则不会在每个元素上映射:

In[146]:=
Click for copyable input
Out[146]=

您可以使函数具有可列表性;现在它将映射在每个元素上:

In[147]:=
Click for copyable input
Out[148]//MatrixForm=
    

另一种创建矩阵的重要方式是导入一个数据文件. 这可以通过列表格式如 Table (.dat)CSV (.csv)TSV (.tsv) 等来实现. 矩阵也可以从一个 Excel 电子表格 (.xls) 中读取.

这里,用 ImportString 将一个 CSV 格式的字符串导入矩阵. 从一个文件中导入通过 Import 完成:

In[149]:=
Click for copyable input
Out[149]=

Mathematica 还支持其它许多格式,包括诸如 HarwellBoeingMATHDFNASACDFFITS 等科学和医学数据格式.

    

您创建矩阵的方式可能会对程序的效率具有重要的影响. 为了获得最佳的效率,要避免追加矩阵,避免不必要的创建操作,并尽可能使用可列表操作.

该例重复地向一个矩阵添加新行:

In[150]:=
Click for copyable input
Out[151]=

在一次计算中创建矩阵要快得多. 只要看到一个 For 循环,试着将它用其它构件代替,如 Table

In[152]:=
Click for copyable input
Out[152]=

下面的例子创建了一个 零矩阵,然后通过一个循环进行填充. 这里零矩阵的创建是完全不必要的:

In[153]:=
Click for copyable input
Out[153]=

为矩阵各行一次性地创建数据,再使用一个可列表运算要快得多:

In[154]:=
Click for copyable input
Out[154]=

如果矩阵很大且具有很多相同的元素(例如零),那么您可以考虑由 SparseArray 形成的稀疏矩阵.

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