How to| 创建矩阵
矩阵在 Wolfram 语言中用列表表示. 它们可以用{ } 符号直接输入、由一个公式创建或者从一个数据文件中导入. Wolfram 语言还有各种创建对角矩阵、常数矩阵和其它特殊矩阵类型的命令.
mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}可以使用 MatrixForm 将结果用矩阵符号表示:
mat//MatrixFormexpr//fun 是输入 fun[expr] 的另一种方式. 当 fun 为格式化函数时,这会很方便.
这里用 Table 创建一个
和
值的网格.
hx = 0.5;hy = 0.7;
mat = Table[x hx + y hy, {x, 4}, {y, 5}];mat//MatrixForm注意 Wolfram 语言中的矩阵并不只限于包含数字;它们可以包含任何符号项,例如公式:
mat = Table[x^i + x^j, {i, 1, 4}, {j, 1, 3}];
mat//MatrixForm当您创建一个矩阵并用一个赋值式保存时,注意不要使用 MatrixForm 与格式化结合. 使用圆括号:
(mat = {{1, 2}, {3, 4}})//MatrixFormmat.mat//MatrixFormmat = {{1, 2}, {3, 4}}//MatrixForm则 mat 的输出将与一个矩阵相似,但不会像一个矩阵一样进行计算. 例如,下式将不执行矩阵的乘法运算:
mat.mat您可以使用 FullForm 检查 mat 的值:
mat//FullForm这表明 mat 还包括格式化包装 MatrixForm,这层包装使得它不再像矩阵一样工作.
您可以将 Wolfram 语言中的许多常见运算应用于列表,然后得到另一个列表,并将函数映射在各个元素上. 这同样适用于矩阵,它们是列表的列表.
mat = {{16, 25}, {9, 36}};
mat//MatrixForm将 Sqrt 应用于矩阵的各个元素:
Sqrt[mat]//MatrixFormSqrt 的这种行为被称作可列表性,它使代码非常高效并具有可读性.
fun[mat]SetAttributes[ fun, Listable];
fun[mat]//MatrixForm另一种创建矩阵的重要方式是导入一个数据文件. 这可以通过列表格式如 Table (.dat)、CSV (.csv) 和 TSV (.tsv) 等来实现. 矩阵也可以从一个 Excel 电子表格 (.xls) 中读取.
这里,用 ImportString 将一个 CSV 格式的字符串导入矩阵. 从一个文件中导入通过 Import 完成:
mat = ImportString["1.2,4.5
6.7,1.2", "CSV"]Wolfram 语言还支持其它许多格式,包括诸如 HarwellBoeing、MAT、HDF、NASACDF 和 FITS 等科学和医学数据格式.
您创建矩阵的方式可能会对程序的效率具有重要的影响. 为了获得最佳的效率,要避免追加矩阵,避免不必要的创建操作,并尽可能使用可列表操作.
mat = {};
For[i = 1, i ≤ 10000, i++, mat = Append[mat, {i, i ^ 2, i ^ 3}]];//AbsoluteTiming在一次计算中创建矩阵要快得多. 只要看到一个 For 循环,试着将它用其它构件代替,如 Table:
mat = Table[{i, i ^ 2, i ^ 3}, {i, 10000}];//AbsoluteTiming下面的例子创建了一个
零矩阵,然后通过一个循环进行填充. 这里零矩阵的创建是完全不必要的:
(n = 10000;
mat = Table[0.0, {2}, {n}];
For[i = 1, i ≤ n, i++, mat[[1, i]] = Sin[2.0 Pi i / n];
mat[[2, i]] = Cos[2.0 Pi i / n]];)//AbsoluteTiming(n = 10000;
v = 2.0 Pi Range[1., n] / n;
mat1 = {Sin[v], Cos[v]};)//AbsoluteTiming如果矩阵很大且具有很多相同的元素(例如零),那么您可以考虑由 SparseArray 形成的稀疏矩阵.