Python遥感数据主成分分析

  原文: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~

时间: 2024-10-07 15:55:05

Python遥感数据主成分分析的相关文章

Python模拟数据工具哪些比较好用

今天给大家推荐两款基本的Python模拟数据工具:mock和pytest monkeypatch. 为什么要模拟数据? 我们的应用中有一些部分需要依赖外部的库或对象.为了隔离开这部分,我们需要代替这些外部依赖,因而就用到了模拟数据.我们模拟外部的API来产生特定的行为,比如说返回符合之前定义的恰当的返回值. 模拟函数 我们有一个function.py的模块: 然后我们来看下如何将其与Mock库结合使用的: 这里发生了什么?1-4行是为了兼容python 2和3来引入的代码,在python 3中m

遥感数据下载地址

遥感数据下载地址 1 AVHRR.DEM.EO-1数据下载地址 http://earthexplorer.usgs.gov/ 2 ASTER.MOIDS.EO-1数据下载地址 http://glovis.usgs.gov/ 3 EO-1 Hyperion 数据介绍网址 http://eo1.gsfc.nasa.gov/new/extended/sensorWeb/general.html 4 室内的高光谱数据(400nm~700nm)光谱分辨率为10nm http://color.psych.u

Python学习——数据排序方法

Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2,6,432,78,43,22,896,42,677,12] >>> data1.sort() >>> data1 #原来的顺序被替换 [2, 4, 6, 12, 22, 42, 43, 78, 432, 677, 896] 2. 复制排序:采用sorted()内置函数,按照

python&php数据抓取、爬虫分析与中介,有网址案例

最近在做一个网络爬虫程序,后台使用python不定时去抓取数据,前台使用php进行展示 网站是:http://se.dianfenxiang.com python&php数据抓取.爬虫分析与中介,有网址案例,布布扣,bubuko.com

用 Python 排序数据的多种方法

用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭代对象(iterable)排序为一个新的有序列表. 本文我们将去探索用 Python 做数据排序的多种方法. 排序基础 简单的升序排序非常容易:只需调用 sorted() 函数,就得到一个有序的新列表: 你也可以使用 list.sort() 方法,此方法为就地排序(并且返回 None 来避免混淆).

[转]python 可变数据和不可变数据解析

python 的数据类型和C不一样,有一种类型:可变类型 (mutable)和不可变类型(immutable) Python中所有变量都是值的引用,也就说变量通过绑定的方式指向其值. 而这里说的不可变指的是值的不可变. 对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收.不可变的类型还有一个特性,就是可以计算其hash值,这样才能进一步作为字典的key.可变类型数据对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请

遥感数据下载

原文 西部数据中心数据清单2009-04-23 23:07(一)基础地理数据 1. 中国1km分辨率DEM  :根据中国1:25万等高线和高程点形成的数据,默认投影为Alber投影,可根据用户需求提供特殊投影的DEM数据,DEM分辨率不高于1km分辨率.  在线 2. SRTM数据中国子区数据:包括SRTM不同分辨率的分幅和镶嵌数据,并在此基础上提供数据切割.地图投影和数据格式转换等数据定制服务. 在线 3. GTOPO30 1km DEM:从USGS 制备的全球GTOPO 30 1km  DE

Python大数据与机器学习之NumPy初体验

本文是Python大数据与机器学习系列文章中的第6篇,将介绍学习Python大数据与机器学习所必须的NumPy库. 通过本文系列文章您将能够学到的知识如下: 应用Python进行大数据与机器学习 应用Spark进行大数据分析 实现机器学习算法 学习使用NumPy库处理数值数据 学习使用Pandas库进行数据分析 学习使用Matplotlib库进行Python绘图 学习使用Seaborn库进行统计绘图 使用Plotly库进行动态可视化 使用SciKit-learn处理机器学习任务 K-Means聚

MySQL实验准备(二)--Python模拟数据(MySQL数据库)

Python模拟数据(MySQL数据库) 数据模拟 目的:模拟多个表的插入和查询数据的模拟,再通过基准测试脚本测试服务器性能和收集数据,仿真模拟. 备注: 如果需要基础的python环境,可以查看<MySQL实验准备(一)--环境准备>文档 实验脚本 通过对一个简单表的脚本插入和查询模拟,后面能 举一反三,完成多张表的多表插入,多线程的多表插入,多线程查询,和多线程的join查询. 数据库的表结构 mysql> show create table zdemo.student; +----