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. [Luogu] 运输计划

    https://www.luogu.org/problemnew/show/2680 inline 神奇的东西 最好戒掉吧(read()除外) 这道题将求解性问题转化为判定性问题,当然就是二分答案了 ...

  2. 使用MockMVC与Junit进行单体测试

    1.pom.xml追加 junit spring-test 2.测试共通类 @ContextConfiguration(locations = { "classpath:springfram ...

  3. HTTP状态码和支持的方法

    1. HTTP常用状态码   200 ok 客户端请求成功 400 bad request 客户端请求有语法错误,不能被服务器所理解 401 unauthorized 请求要求身份验证,对于登录后请求 ...

  4. vue中点击复制粘贴功能 clipboard 移动端

    页面是由 v-for 循环渲染出来,要给每一个结构里面的复制按钮加一个复制功能 npm install clipboard --save    安装,如果安装处问题,多安装几次,我自己也安装了好几次 ...

  5. python学习:模块(第一节)

    1.什么是模块? 如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这 ...

  6. zabbix (8) 自动发现

    当主机数量过多时,如果一台一台的添加,估计整个人都要崩溃,而通过自动发现或者自动注册可以大批量的添加主机,并且自动绑定模板,触发器,动作等操作 1.基本配置 (1)创建发现规则 (2)配置规则 效果如 ...

  7. CTR预估之LR与GBDT融合

    转载自:http://www.cbdio.com/BigData/2015-08/27/content_3750170.htm 1.背景 CTR预估,广告点击率(Click-Through Rate ...

  8. Lasso回归的坐标下降法推导

    目标函数 Lasso相当于带有L1正则化项的线性回归.先看下目标函数:RSS(w)+λ∥w∥1=∑Ni=0(yi−∑Dj=0wjhj(xi))2+λ∑Dj=0∣wj∣RSS(w)+λ∥w∥1=∑i=0 ...

  9. error storage size of my_addr isn't known

  10. golang 循环创建闭包 问题排查

    ][]string{ { { "邀请码是什么", "我没有邀请码", "这个邀请码我可以随便填吗", "邀请码可以填他的手机号吗& ...