Axure RP终极汉化指南:5分钟打造完美中文原型设计环境
2026/6/4 11:46:33
https://pan.quark.cn/s/43d906ddfa1b、https://pan.quark.cn/s/90ad8fba8347、https://pan.quark.cn/s/d9d72152d3cf一个m×n 矩阵(m 行 n 列)可表示为:
A=[a11a12…a1na21a22…a2n⋮⋮⋱⋮am1am2…amn] A = \begin{bmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{bmatrix}A=a11a21⋮am1a12a22⋮am2……⋱…a1na2n⋮amn
其中aija_{ij}aij表示矩阵第iii行第jjj列的元素,矩阵的维度记为m×n。
在计算机中,矩阵的存储主要有两种方式:
list[list]、Java 的int[][],按行顺序存储元素,访问a[i][j]的时间复杂度为O(1)O(1)O(1)。index = i * n + j(行优先)或index = j * m + i(列优先)计算元素位置,适合底层内存优化。根据元素分布和维度特征,矩阵可分为以下常见类型:
| 操作 | 描述 | 时间复杂度 |
|---|---|---|
| 访问元素 | 获取第 i 行第 j 列的元素 | O(1)O(1)O(1) |
| 矩阵转置 | 将矩阵的行和列互换,得到ATA^TAT,满足AT[i][j]=A[j][i]A^T[i][j] = A[j][i]AT[i][j]=A[j][i] | O(m×n)O(m×n)O(m×n) |
| 矩阵加法 | 两个同维度矩阵对应位置元素相加,要求AAA和BBB均为 m×n 矩阵 | O(m×n)O(m×n)O(m×n) |
| 标量乘法 | 矩阵中所有元素乘以一个常数 k | O(m×n)O(m×n)O(m×n) |
矩阵乘法是矩阵的核心操作,仅当第一个矩阵的列数等于第二个矩阵的行数时可乘。
classMatrix:def__init__(self,data):"""初始化矩阵,data为二维列表"""self.data=data self.rows=len(data)self.cols=len(data[0])ifself.rows>0else0def__str__(self):"""矩阵的字符串表示"""return'\n'.join([' '.join(map(str,row))forrowinself.data])deftranspose(self):"""矩阵转置"""transposed=[[self.data[j][i]forjinrange(self.rows)]foriinrange(self.cols)]returnMatrix(transposed)defadd(self,other):"""矩阵加法,要求维度相同"""ifself.rows!=other.rowsorself.cols!=other.cols:raiseValueError("矩阵维度不匹配,无法相加")result=[]foriinrange(self.rows):row=[self.data[i][j]+other.data[i][j]forjinrange(self.cols)]result.append(row)returnMatrix(result)defmultiply(self,other):"""矩阵乘法,要求self.cols == other.rows"""ifself.cols!=other.rows:raiseValueError("矩阵维度不匹配,无法相乘")result=[]foriinrange(self.rows):row=[]forjinrange(other.cols):# 计算C[i][j] = sum(A[i][k] * B[k][j])val=sum(self.data[i][k]*other.data[k][j]forkinrange(self.cols))row.append(val)result.append(row)returnMatrix(result)# 使用示例if__name__=="__main__":# 初始化两个矩阵A=Matrix([[1,2,3],[4,5,6]])# 2×3矩阵B=Matrix([[7,8],[9,10],[11,12]])# 3×2矩阵C=Matrix([[1,2],[3,4]])# 2×2矩阵print("矩阵A:")print(A)print("\n矩阵A的转置:")print(A.transpose())print("\n矩阵C + C:")print(C.add(C))print("\n矩阵A × B:")print(A.multiply(B))对于稀疏矩阵(大部分元素为 0),直接用二维数组存储会浪费大量空间,常用以下优化方式:
(行号, 列号, 值),例如矩阵[[0,2,0],[3,0,0],[0,0,5]]可存储为[(0,1,2), (1,0,3), (2,2,5)]。