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)

  1. @author: Bambo
  2. """
  3.  
  4. import numpy as np
  5. import scipy
  6.  
  7. x=[random.randint(0,100) for i in range(40)]
  8. y=[random.randint(0,100) for i in range(40)]
  9. z=[a*3+b*2+1 for a,b in zip(x,y)]
  10.  
  11. r=map(list,zip(x,y,z))
  12. k=mat(r)
  13. re=k.T*k
  14.  
  15. e,v=scipy.linalg.eigh(re,turbo=False,eigvals=(0,0))
  16. #e,v=scipy.linalg.eigh(re,eigvals=(a,b))
  17.  
  18. print e
  19. print v

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

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

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Sun Nov 05 19:37:26 2017
  4.  
  5. @author: Bambo
  6. """
  7.  
  8. import numpy as np
  9. import scipy
  10.  
  11. #随机生成平面一上的点
  12. x1=[np.random.randint(0,100) for i in range(400)]
  13. y1=[np.random.randint(0,100) for i in range(400)]
  14. z1=[a*3+b*2+1 for a,b in zip(x1,y1)]
  15. #随机生成平面二上的点
  16. x2=[np.random.randint(0,100) for i in range(400)]
  17. y2=[np.random.randint(0,100) for i in range(400)]
  18. z2=[c*3+d*2+5 for c,d in zip(x2,y2)]
  19.  
  20. x1c=np.mean(x1)
  21. y1c=np.mean(y1)
  22. z1c=np.mean(z1)
  23.  
  24. x2c=np.mean(x2)
  25. y2c=np.mean(y2)
  26. z2c=np.mean(z2)
  27.  
  28. xc=(x1c+x2c)/2
  29. yc=(y1c+y2c)/2
  30. zc=(z1c+z2c)/2
  31.  
  32. #扩充成为两个平面的点
  33. x1[len(x1):len(x1)]=x2
  34. y1[len(y1):len(y1)]=y2
  35. z1[len(z1):len(z1)]=z2
  36.  
  37. x=[(x1[i]-xc) for i in range(len(x1))]
  38. y=[(y1[j]-yc) for j in range(len(y1))]
  39. z=[(z1[p]-zc) for p in range(len(z1))]
  40. print x
  41. print y
  42. print z
  43.  
  44. r=map(list,zip(x,y,z))
  45. k=np.mat(r)
  46. re=k.T*k
  47. #求最小特征值对应的特征向量
  48. e,v=scipy.linalg.eigh(re,turbo=False,eigvals=(0,2))
  49. #e,v=scipy.linalg.eigh(re,eigvals=(a,b))
  50.  
  51. print e
  52. 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/P1962 矩阵快速幂加速 #include <bits/stdc++.h> using namespace s ...

  2. windows server2012 搭建.netcore+nginx+nssm运行环境

    1.linux+.netcore+sqlserver的坑 linux不支持访问sqlserver2008及以下的版本(由于System.Data.SqlClient.dll的限制.windows上面访 ...

  3. Java基础系列 - JAVA集合ArrayList,Vector,HashMap,HashTable等使用

    package com.test4; import java.util.*; /** * JAVA集合ArrayList,Vector,HashMap,HashTable等使用 */ public c ...

  4. (转)hadoop 集群常用端口

    转载于:https://www.cnblogs.com/liying123/p/7097806.html hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于 ...

  5. hadoop--presto安装部署

    系统环境:hadoop + hive已经配置完成 1.下载presto:https://repo1.maven.org/maven2/com/facebook/presto/presto-server ...

  6. Tkinter 之主窗口参数

    一.常用参数 语法 作用 window= tk.TK() 创建窗口 window['height'] = 300 设置高 window['width'] = 500 设置宽 window.title( ...

  7. nginx 转发 header 数据丢失

    刚帮同事解决了个问题,记录一下,现象:放在header里面的数据,本地后台可以收到,集成可以收到,测试不行, 查看代码没问题,排除代码问题,比较集成和测试环境有何不同,发现集成环境是局域网访问,192 ...

  8. CF1188B Count Pairs

    [题目描述] 给定一个质数 \(p\) , 一个长度为 \(n\)n 的序列 \(a = \{ a_1,a_2,\cdots,a_n\}\)一个整数 \(k\). 求所有数对 \((i, j)\) ( ...

  9. django post 403

    同一个地址GET方式可以正常访问 在POST 提交数据过程中报403错误, 原来是1.3版本settings.py 文件中 'django.middleware.csrf.CsrfViewMiddle ...

  10. Git如何永久删除某个重要文件文件或文件夹 (包括历史记录) 强制

    有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的), 而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必 ...