首先挂一个常见命令对比:python中numpy与matlab的对应关系_mergerly的博客-CSDN博客
- 傅里叶变换
二维矩阵的傅里叶变换
matlab的ifft=numpy.fft.fft2
三维矩阵的时候,在matlab中命令为fft2()
numpy可以这样写:
fft = np.fft.fft2(img[:, :, 0]).T
for num in range(1, psf_num):
fft = np.dstack((fft, np.fft.fft2(img[:, :, num]).T))
傅里叶逆变换也是一样的,二维矩阵两者相等,
三维矩阵的时候,在matlab中命令为ifft2()
numpy可以这样写:
ifft = np.fft.ifft2(img[:, :, 0]).T
for num in range(1, psf_num):
ifft = np.dstack((ifft, np.fft.ifft2(img[:, :, num]).T))
- reshape
(这部分是看了大佬的:Python 三维数组转化为二维数组 和MATLAB的reshape函数结果一致_jzjz9888的博客-程序员信息网_matlab和python的三维数组 - 程序员信息网)
三维矩阵reshape为二维的时候
matlab代码:b = reshape(a, , )
numpy:
a = a.transose(1,2,0)
b = numpy.reshape(a, [ , ], order = 'F')
- 三维矩阵相乘
mmx是matlab一个加速矩阵运算的工具包
mmx('square', a9, [], 't')
help文档里面是: C = mmx('square', A, [],'t') will perform C = A'*A
对于二维矩阵,matlab和numpy是一样的,如help中缩写
但是如果矩阵是三维,在matlab下面命令一样,在numpy下就可以这样计算:
a9 = batch_blur_base_mat.transpose((1,0,2))
b9 = a9.T
result = np.einsum('ijk,jnk->ink', a9, b9)
- 稀疏矩阵,目前只用过这个命令
在matlab中是:result = sparse(i_index, j_index, im, m, n);
看了大佬解释(matlab中的sparse函数使用_想要进步的码农的博客-CSDN博客_matlab sparse)
原理在于result(i_index(k),j_index(k)) = im(k),并将result的大小指定为m×n
numpy源码中是这样注释自己的命令的:

numpy和matlab的不同就是numpy中data和两个index必须是一维数组
所以上面的matlab命令在numpy中可以这样写:
i_index1 = i_index.T.flatten() j_index1 = j_index.T.flatten() im = im.T.flatten() result = sparse.csr_matrix((im, (i_index1, j_index1)), [m, n])
- 稀疏矩阵求逆
python下面:这会用的不是numpy了,返回一个matrix from scipy.sparse.linalg.inv(im)
等价于matlab的:inv(AS)
- 记录一个python下面常见的bug
TypeError: data type not understood
这种时候先检查自己的括号什么的有没有少写
523

被折叠的 条评论
为什么被折叠?



