How to| 更新矩阵的一部分
Mathematica 具有多种矩阵操作,这些操作支持矩阵的构建、计算及可视化等操作. 同时,它具有丰富的语言,可以对矩阵的一部分进行择取并赋予新值.
定义下面的矩阵:
Out[2]//MatrixForm= |
| |  |
在赋值式的左端使用
(Part 的简写形式)设置一个元素:
| Out[3]= |  |
这里表明在(1, 2) 处的元素已被更新:
Out[4]//MatrixForm= |
| |  |
如对一整行进行设置,需使用一个索引值来指定行,并赋给一个新行:
Out[6]//MatrixForm= |
| |  |
如对一整列进行设置,需用 All 选择所有行,并指定列:
Out[8]//MatrixForm= |
| |  |
如要设置一个子阵,可以使用 Span 的简写形式
.
首先设置一个5×5矩阵,元素由0到10之间的随机整数组成:
Out[25]//MatrixForm= |
| |  |
这里左上方突出显示的3×4矩阵对应于行1至3及列1至4:
| Out[49]= |  |
使用 Span 的简写形式 (
) 指定所跨越的相关行与列,更新该子矩阵:
Out[27]//MatrixForm= |
| |  |
更新除最外围的行与列外的所有元素(负数索引由后向前计数):
Out[29]//MatrixForm= |
| |  |
当更新一个大型矩阵时,应该尽量避免使用循环语句. 如果能够使用其中一种更新技术,用一个指令更新所有的元素,速度通常会快得多:
用这种方法更新一行的所有元素,速度较慢:
| Out[37]= |  |
这种方法要快得多:
| Out[38]= |  |
如果不能避免在循环中更新矩阵,您需要小心避免额外引用矩阵. 否则,矩阵将被复制,循环将不会很快运行:
这里小心地避免了额外引用. 循环运行得相当快:
| Out[40]= |  |
这里,在每一步都进行矩阵的复制,循环运行得较慢:
| Out[41]= |  |