Obvious,最小特征值对应的特征向量为平面的法向

这个问题还有个关键是通过python求协方差矩阵的特征值和特征向量,np.linalg.eig()方法直接返回了特征值的向量和特征向量的矩阵

scipy.linalg.eigh()方法可以对返回的特征值和特征向量进行控制,通过eigvals参数,可以控制,比如我要返回最小的特征值,和其对应的特征向量,那么就是eigvals(0:0),在升序的情况下。还是很有用的。

scipy.linalg.eigh(ab=Nonelower=Trueeigvals_only=Falseoverwrite_a=Falseoverwrite_b=Falseturbo=Trueeigvals=Nonetype=1check_finite=True)

@author: Bambo
""" import numpy as np
import scipy x=[random.randint(0,100) for i in range(40)]
y=[random.randint(0,100) for i in range(40)]
z=[a*3+b*2+1 for a,b in zip(x,y)] r=map(list,zip(x,y,z))
k=mat(r)
re=k.T*k e,v=scipy.linalg.eigh(re,turbo=False,eigvals=(0,0))
#e,v=scipy.linalg.eigh(re,eigvals=(a,b)) print e
print v

  下面这段代码是当有两个平面时,通过协方差矩阵的奇异值分解,求两个平面的法向,测试显示结果是正确的。

会有人问为啥你知道了平面的法向还通过奇异值分解又求了一次,为了科研。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 05 19:37:26 2017 @author: Bambo
""" import numpy as np
import scipy #随机生成平面一上的点
x1=[np.random.randint(0,100) for i in range(400)]
y1=[np.random.randint(0,100) for i in range(400)]
z1=[a*3+b*2+1 for a,b in zip(x1,y1)]
#随机生成平面二上的点
x2=[np.random.randint(0,100) for i in range(400)]
y2=[np.random.randint(0,100) for i in range(400)]
z2=[c*3+d*2+5 for c,d in zip(x2,y2)] x1c=np.mean(x1)
y1c=np.mean(y1)
z1c=np.mean(z1) x2c=np.mean(x2)
y2c=np.mean(y2)
z2c=np.mean(z2) xc=(x1c+x2c)/2
yc=(y1c+y2c)/2
zc=(z1c+z2c)/2 #扩充成为两个平面的点
x1[len(x1):len(x1)]=x2
y1[len(y1):len(y1)]=y2
z1[len(z1):len(z1)]=z2 x=[(x1[i]-xc) for i in range(len(x1))]
y=[(y1[j]-yc) for j in range(len(y1))]
z=[(z1[p]-zc) for p in range(len(z1))]
print x
print y
print z r=map(list,zip(x,y,z))
k=np.mat(r)
re=k.T*k
#求最小特征值对应的特征向量
e,v=scipy.linalg.eigh(re,turbo=False,eigvals=(0,2))
#e,v=scipy.linalg.eigh(re,eigvals=(a,b)) print e
print v

  

python计算平面的法向-利用协方差矩阵求解特征值和特征向量的更多相关文章

  1. 利用python做矩阵的简单运算(行列式、特征值、特征向量等的求解)

    import numpy as np lis = np.mat([[1,2,3],[3,4,5],[4,5,6]]) print(np.linalg.inv(lis)) # 求矩阵的逆矩阵 [[-1. ...

  2. 利用Python计算π的值,并显示进度条

    利用Python计算π的值,并显示进度条  第一步:下载tqdm 第二步;编写代码 from math import * from tqdm import tqdm from time import ...

  3. 用Python计算幂的两种方法,非递归和递归法

    用Python计算幂的两种方法: #coding:utf-8 #计算幂的两种方法.py #1.常规方法利用函数 #不使用递归计算幂的方法 """ def power(x, ...

  4. 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型

    人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...

  5. Python计算斗牛游戏的概率

    Python计算斗牛游戏的概率 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛.在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率). ...

  6. Python计算分位数

    Python计算分位数    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/gdkyxy2013/article/details/80911514 ...

  7. Python实现熵值法确定权重

    本文从以下四个方面,介绍用Python实现熵值法确定权重: 一. 熵值法介绍 二. 熵值法实现 三. Python实现熵值法示例1 四. Python实现熵值法示例2 一. 熵值法介绍 熵值法是计算指 ...

  8. Python计算AUC

    AUC(Area under curve)是机器学习常用的二分类评测手段,直接含义是ROC曲线下的面积.另一种解释是:随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进 ...

  9. python计算出现错误

    用python计算39.8-0.1得出的结果是39.699999999999996 其他数字计算正确,唯独这个计算错误. 原因: 中文解释: https://docs.python.org/zh-cn ...

随机推荐

  1. Python3循环

    Python中while语句的一般形式: while 判断条件: 语句 同样需要注意冒号和缩进,另外在Python中没有do…while循环 下面的实例计算1到100总和 ##calc.py n = ...

  2. 【原创】sed正则表达式替换

    1.数字替换原数字 sed -i "s/\([0-9]*\)/\1/g"

  3. hadoop(1)---hadoop的介绍和几种模式。

    一.什么是hadoop? Hadoop软件库是一个开源框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集.它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储.库本身不是依靠 ...

  4. 数据结构——KMP算法

    算法介绍 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  5. Java8 JVM参数解读

    附录:https://www.liangzl.com/get-article-detail-134315.html 摘要: 我们知道java虚拟机启动时会带有很多的启动参数,Java命令本身就是一个多 ...

  6. Spring Boot项目跳转不到jsp页面是怎么回事

    SpringBoot访问不了JSP但却能进入后台 一直报错: 解决方法: 改成下面的

  7. JMeter学习-参数化

    JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户 ...

  8. Bitmap之extractAlpha函数抽取alpha值

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  9. 002-02-RestTemplate-初始化调用流程

    一.简述 调用 RestTemplate 的默认构造函数,RestTemplate 对象在底层通过使用 java.net 包下的实现创建 HTTP 请求,可以通过使用 ClientHttpReques ...

  10. Linux/CentOS下修改MAC地址

    Linux/CentOS下修改MAC地址 摘自:https://blog.csdn.net/qq_33233768/article/details/64906265 2017年03月22日 11:06 ...