python和matlab矩阵运算效率_MATLAB与Python中矩阵运算的不同结果

我在一组生成的图像之间实现PCA,并使用选定的主成分抑制图像的背景。我已经在MATLAB中实现了这一点,并收到了我所期望的结果。但当我在Python中实现这一点时,我的结果就大不相同了。过程如下,我首先生成图像数据集,对数据集进行PCA,计算并从数据集中的图像中减去背景,然后重塑数据集并将结果与原始数据进行比较。下面是我对原始数据集执行PCA的函数。在def pca_images(total_images, count, size, num_pcs):

flat_images = np.empty([count, size*size])

# unravel structure of the image

for i in range(0,count):

flat_images[i] = np.ravel(total_images[i])

# calculate covariance matrix

cov_mat = np.cov(flat_images.T)

# eigenvectors and eigenvalues of the covariance matrix

eig_val_cov, eig_vec_cov = np.linalg.eig(cov_mat)

# sort the (eigenvalue, eigenvector) lists from low to high

inds = eig_val_cov.argsort()

# flip around and sort eigenvectors high to low

eig_vec_cov = eig_vec_cov[inds[::-1]]

# take num_pcs number of eigenvectors

components = eig_vec_cov[:,0:num_pcs]

# create list to store background for each image

bg = []

# find principal components

for i in range(0,count):

bg.append(np.dot(np.dot(components.T,flat_images[i]),components.T))

# allocate array to hold filtered images

images_suppressed = []

# filter out background from each image and store

for i in range(0,count):

images_suppressed.append(flat_images[i] - bg[i])

return images_suppressed

当我将其与我的MATLAB代码进行比较时,差异似乎出现在pca_images函数中的bg矩阵中。在MATLAB中,这个矩阵只包含实数,而在Python中则是实值和复值。结果表明,由于从原始图像中减去images_suppressed值,因此images_suppressed像素值都小于原始图像像素值。然而,在Python中,我的一些images_suppressed值比原始图像像素值大,尽管进行了减法处理,但这会导致噪声实际上被添加到图像中。用于查找bg矩阵的MATLAB代码如下:

^{pr2}$

我知道这个问题与这个bg矩阵有关,我还没有找到任何东西来解释为什么我的特征向量与原始数据集相乘会在MATLAB和Python中得到不同的结果。有人能解释一下为什么会这样吗??在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值