您的位置:首页 > 编程语言 > Python开发

Python遥感数据主成分分析

2016-01-25 22:38 821 查看
  原文:http://www.cnblogs.com/leonwen/p/5158947.html

  该算法由MatLab移植而来(具体参见上一篇博文)。但是最终输出结果却和MatLab不一致,经排查发现在进行调用两者内部函数eig进行求解特征值和特征向量的时候,两者特征值都一致,但是特征向量却不同。

  可是,从理论上感觉也说得过去,因为特征向量本来就具有不唯一性。最让人费解的是,就算两者特征向量不一致,可为什么使用PCA的结果却反差很大呢?感觉上来看,好像是Python的不准确行更大一点。

  代码如下:

# -*- coding: utf-8 -*-
"""
Created on Tue Jan 12 21:45:57 2016

@author: 文核
"""

import os

from PIL import Image
from numpy import *
from pylab import *

path = r'D:\Projects\PythonProj\ImageProcessing\2012'
sst_dir = os.listdir(path)
file_len = len(sst_dir)

sst_list = []

for i in range(file_len):
str = path + '\\' + sst_dir[i]
#txt = open(str).read()
sst_list.append(str)

immatrix = []

for im in sst_list:
text = loadtxt(im)
immatrix.append(text)

immatrix = array(immatrix)

# 显示输出
figure()
gray()
for i in range(file_len):
subplot(3,4,i + 1)

pic = immatrix[i].reshape(180,360)
pic = pic[::-1]
#    picshow = rot90(pic,4)
imshow(pic)
colorbar()

show()

# 转换成样本总体
X = immatrix.T
# 获取要本大小
m,n = X.shape[0:2]

# 取得各个样本均值
meanVal = mean(X,axis = 0)
#tempMean = tile(meanVal,(64800,1))

# 样本矩阵去中心化
X = X - tile(meanVal,(64800,1))

# 计算协方差
S = dot(X.T,X) / (m - 1)

# 计算特征值eg和特征向量Ev
eg,Ev = linalg.eig(S)
#eg1,Ev1 = linalg.eigh(S) # 这两种算法存在排序区别,eigh返回结果由小到大

# 计算新的成分
Y = dot(immatrix.T,Ev)

figure()
gray()
for i in range(n):
subplot(3,4,i + 1)
out = Y[:,i]

outpic = out.reshape(180,360)
outpic = outpic[::-1]
imshow(outpic)
colorbar()

show()


  结果显示:



原始数据显示



PCA主成分分析结果输出

  可能是我自己的原因吧,正在排查,哪位大神指导还望课指导鄙人一下~先就此谢过~O(∩_∩)O~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: