学完python基础知识、numpy及pandas和可视化之后,终于下决心将MATLAB代码用python再写一遍了,简单总结该过程中遇到的问题及常用函数。
函数基本都是用的numpy库,数据是ndarray
1、按列堆叠数组
MATLAB: [a, b]
numpy: np.hstack((a,b)); np.concatenate([a, b], axis=1); np.c_[a, b]
pandas: pd.concat([a, b], axis=1)
2、按行堆叠数组
MATLAB: [a; b]
numpy: np.vstack((a,b)); np.concatenate([a, b], axis=0); np.r_[a, b]
pandas: pd.concat([a, b], axis=0)
3、重复行或列
a 重复m行n列
MATLAB: repmat(a, m, n )
numpy: np.tile(a,(m,n))
4、按原顺序去重
MATLAB:unique(a, 'stable')
numpy: a[np.sort(np.unique(a, return_index=True)[1])]
np.unique(a) 是去重后进行排序,后面语句输出的是排序索引,按索引排序就是原顺序
5、从大到小排序
MATLAB:sort(a, 'descend');
numpy: np.sort(a)[::-1]
np.sort() 没有从大到小排序,自动从小到大排序再倒序
6、平均值
MATLAB: mean(a)-每列平均值 mean(a,1)-每列平均值 mean(a,2)-每行平均值
python: a.mean() -所有值的平均值 a.mean(axis=0) -列平均 a.mean(axis=1) -行平均
7、协方差
MATLAB: cov(a)
numpy: np.cov(a, rowvar=False)
pandas: a.cov()
8、一维数组转置
a.reshape(a.shape[0], 1)
a.reshape(-1,1)
9、矩阵运算
MATLAB: a\b
numpy: np.linalg.solve(a, b)
10、特征值和特征向量
MATLAB: [eigenvector, eigenvalue]=eig(a)
numpy:
# 特征值和特征向量 非对称阵 用eig
eigenvalue, eigenvector = np.linalg.eig(a)
# 对称矩阵 用eigh 速度更快
eigenvalue, eigenvector = np.linalg.eigh(a)