python矩阵

2-2 Numpy-矩阵

耗尽温柔 提交于 2019-11-30 16:59:37
1 # !usr/bin/env python 2 # Author:@vilicute 3 4 import numpy as np 5 # 矩阵的创建 6 matr1 = np.mat("4 2 3;4 5 6;7 8 9") 7 matr2 = np.matrix([[4,5,6],[7,8,9],[1,2,3]]) 8 print("\nmatr1=\n",matr1) 9 print("\nmatr2=\n",matr2) 10 11 arr1 = np.eye(3) 12 arr2 = arr1*3 13 arr3 = np.random.randint(0,10,size = [3,3]) 14 arr4 = np.random.randint(6,10,size = [3,3]) 15 matr3 = np.bmat("arr1 arr3;arr4 arr2") 16 print("\nmatr3=\n",matr3) 17 18 19 # 矩阵的运算 20 matr_numul = matr1*4 21 matr_add = matr1 + matr2 22 matr_sub = matr1 - matr2 23 matr_mul = matr1 * matr2 24 matr_multiply = np.multiply(matr1, matr2) 25

Python一维列矩阵转换成行矩阵

徘徊边缘 提交于 2019-11-30 16:59:02
开发环境:pycharm,python 2.7.14 最近在做毕设,从HDF5文件里读数据,有一个 矩阵data ,是一个200*1的列矩阵,直接读取print后的结果就类似这种: [[132.36055] [132.43315] [132.50566] ...... [134.09851] [134.17006]] 我正在考虑一种画图的方法,所需要的数据是行矩阵,于是百度一下看能不能转置,有一种语句是: print map ( list , zip (*data)) 但结果带有两层中括号[[ ]]: [[132.36055, 132.43315, 132.50566, ...... 134.09851, 134.17006]] 倒是没有测试这种两层括号的会出现什么结果,但保险起见还是想办法改成一层的比较好。 分析一下以上这个结果,类似二维的矩阵,于是考虑用“从二维矩阵中提取一维矩阵”的方法,最后误打误撞算是试出来了: print ( map ( list , zip (*data))[ 0 ]) 结果就是单层中括号了: [132.36055, 132.43315, 132.50566, ...... 134.09851, 134.17006] 注:对于带字符的数组没有尝试过 来源: CSDN 作者: chraytchell 链接: https://blog.csdn.net

使用Python一步步实现PCA算法

拥有回忆 提交于 2019-11-30 16:57:45
使用Python一步步实现PCA算法 标签: PCA Python 本文原地址为: http://sebastianraschka.com/Articles/2014_pca_step_by_step.html Implementing a Principal Component Analysis (PCA) – in Python, step by step Apr 13, 2014 by Sebastian Raschka 此篇为翻译作品,仅作为学习用途。 简介 主成分分析(PCA)的主要目的是通过分析发现数据的模式进行维度的缩减,这个过程的原则是信息损失最小化。 我们希望得到的结果,把初始特征空间映射到一个相对低维度的子空间,同时保证这个低维度空间也能够很好的表达数据的有效信息。在模式分类中,我们希望通过降维操作抽取能够最佳表达数据的特征子集来降低运算时间花费,减少参数估计的误差。 主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切。在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣。 一句话,通过PCA,我们将整个数据集(不带类别标签)映射到一个子空间中,在MDA中,我们致力于找到一个能够最好区分各类的最佳子集。粗略来讲,PCA是通过寻找方差最大的轴(在一类中

python中矩阵的基本运算学习记录

半世苍凉 提交于 2019-11-30 13:52:04
矩阵运算: NumPy 系统是 Python 的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比 Python 自身的嵌套列表( nested list structure) 结构要高效的多(该结构也可以用来表示矩阵( matrix )) import numpy as np from numpy.linalg import * // 矩阵运算 行列式: a=np.mat([[1,23,3],[1,6,4],[13,12,14]]) a_det=det(a) 求逆: a_inv=a.I 伴随矩阵: a_adju=a_det*a_inv 求两个数的最大公因数: def gcd(a,b): while a!=0: a,b = b%a,a return b 求a模m的逆: def exgcd(a,m): if gcd(a,m)!=1: return None u1,u2,u3 = 1,0,a v1,v2,v3 = 0,1,m while v3!=0: q = u3//v3 v1,v2,v3,u1,u2,u3 = (u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3 return u1%m 乘法: C=a*b 加法: C=a+b 转置: a_tra=a.T 来源: CSDN 作者: Baron_wu 链接: https://blog.csdn.net

python中numpy使用

主宰稳场 提交于 2019-11-30 13:49:52
import numpy as np#导入numpy data=[[1,2,3],[4,5,6]]#创建元组 arr=np.array(data)#转化为数组 arr.ndim#数组空间维数 arr.shape#数据行列数 arr.dtype#数据类型""int32"" np.zeros(10)#指定长度 np.zeros((3,6))#创建3行6列的0数组 np.ones(5)#array([ 1., 1., 1., 1., 1.]) np.ones((3,4))#3行4列的全1矩阵 ar1=np.arange(10)#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) np.eye(3)#3维单位矩阵 np.identity(3)#3维单位矩阵 np.ones_like(arr)#创建与arr相同行、列的全1矩阵 np.zeros_like(arr)#创建与arr相同行、列的全0矩阵 arr_f=arr.astype(np.float64)#将arr中的数据类型转换为float64格式 Nstring=np.array(['1.2','3','4'],dtype=np.string_)#创建数组师可以自行定义字符串 N_float=Nstring.astype(np.float)#将string数据转换为float格式,等价于float64 ###

关于python中的数组和矩阵的问题汇总

泄露秘密 提交于 2019-11-30 13:48:25
作为一个习惯了使用matlab的人,开始总是习惯性的把这两个当成一种东西,按照matlab中的矩阵去处理,发现一堆问题,调了一些小bug之后,这里做一个小总结。 首先简单说明一下python中的数据类型: 在 python 内建对象中,数组有三种形式: list 列表:[1, 2, 3] Tuple 元组:(1, 2, 3, 4, 5) Dict 字典:{A:1, B:2} 其中,元组与列表相似,不同之处在于元组的元素不能修改。而字典由键和值构成。 python 标准类针对数组的处理局限于 1 维,并仅提供少量的功能。 NumPy的数组类被称作ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。更多重要ndarray对象属性有: 而 Numpy 最核心且最重要的一个特性就是 ndarray 多维数组对象,它区别于 python 的标准类,拥有对高维数组的处理能力,这也是数值计算过程中缺一不可的重要特性。对于python而言,数组与矩阵两个概念,都是由Numpy库引出来(难怪Numpy也叫科学计算库)。 然后简单说明一下在python中数组和矩阵的区别: Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND

Python+numpy实现矩阵的行列扩展

人走茶凉 提交于 2019-11-30 13:47:38
对于numpy矩阵,行列扩展有三种比较常用的方法: 使用矩阵对象的c_方法扩展列,使用矩阵对象的r_方法扩展行。 使用numpy扩展库提供的insert()函数,使用axis参数指定行或列。 使用numpy扩展库的row_stack()函数扩展行,column_stack()函数扩展列。 来源: CSDN 作者: Python_小屋 链接: https://blog.csdn.net/oh5W6HinUg43JvRhhB/article/details/85333771

【机器学习】PCA

半腔热情 提交于 2019-11-30 13:35:14
目录 PCA 1. PCA最大可分性的思想 2. 基变换(线性变换) 3. 方差 4. 协方差 5. 协方差矩阵 6. 协方差矩阵对角化 7. PCA算法流程 8. PCA算法总结 PCA PCA 就是找出数据最主要的方面,用数据里最主要的方面来代替原始数据。 PCA 是最重要的降维方法之一,在数据压缩、消除冗余和数据噪音消除等领域都有广泛的应用。 1. PCA最大可分性的思想 ​ 最大可分性: 样本点在超平面上的投影尽可能的分开 2. 基变换(线性变换) ​ 欲获得原始数据新的表示空间,最简单方法是对原始数据进行基变换(线性变换)。 3. 方差 ​ 如何选择一个方向或者基才是最优的?基于PCA最大可分思想,我们要找的方向是 降维后损失最小 ,可以理解为 投影后的数据尽可能分得开 ,而分散程度可以用数学上的方差来表示,因为 方差越大数据也就越分散 。 4. 协方差 ​ 在高维变换中,我们希望基变换后选择的各个方向(或者基)是不相关的,这样才能表示更多的信息。数学上使用协方差表示相关性: \[ Cov(a,b) = \frac{1}{m} \sum_{i=1}^{m}a_ib_i \] 如果 \(Cov(a,b)=0\) ,则表示两个字段完全独立,这也是我们的 优化目标 。 5. 协方差矩阵 ​ 我们想达到的 目标( \(Cov(a,b)=0\) ) 与 字段内方差 及 字段间协方差

SVD(奇异值分解)记录

对着背影说爱祢 提交于 2019-11-30 11:59:57
转载自 https://www.cnblogs.com/endlesscoding/p/10033527.html 奇异值分解在数据降维中有较多的应用,这里把它的原理简单总结一下,并且举一个图片压缩的例子,最后做一个简单的分析,希望能够给大家带来帮助。 1、特征值分解(EVD) 实对称矩阵 在理角奇异值分解之前,需要先回顾一下特征值分解,如果矩阵A是一个m×m的 实对称矩阵 (即 ),那么它可以被分解成如下的形式: 其中Q为标准正交阵,即有 ,Σ为对角矩阵,且上面的矩阵的维度均为m×m。λi称为 特征值 ,qi是Q(特征矩阵)中的列向量,称为 特征向量 。 一般矩阵 上面的特征值分解,对矩阵有着较高的要求,它需要被分解的矩阵A为实对称矩阵,但是现实中,我们所遇到的问题一般不是实对称矩阵。那么当我们碰到一般性的矩阵,即有一个m×n的矩阵A,它是否能被分解成上式的形式呢?当然是可以的,这就是我们下面要讨论的内容。 2、奇异值分解(SVD) 2.1 奇异值分解定义 有一个m×n的实数矩阵A,我们想要把它分解成如下的形式 其中U和V均为单位正交阵,即有 和 ,U称为 左奇异矩阵 ,V称为 右奇异矩阵 ,Σ仅在主对角线上有值,我们称它为 奇异值 ,其它元素均为0。上面矩阵的维度分别为 , , 。 一般地Σ有如下形式 对于奇异值分解,我们可以利用上面的图形象表示,图中方块的颜色表示值的大小

Python与线性代数基本概念

牧云@^-^@ 提交于 2019-11-30 08:15:26
在Python中使用Numpy创建向量: x = np.array([1, 2, 3, 4]) 创建3 x 3矩阵 B = np.array([[1, 2],[3, 4],[5, 6]]) Shape形状,也可称为维度,表示矩阵中每个维度的具体数值; B.shape 3 x 2 转置 行向量可转置为列向量,列向量转置为行向量 如为方阵转置后行数列数不变,对于非方阵,2 x 3矩阵转置后为3 x 2矩阵 B_t = A.T 检查转置后形状shape B_t.shape 矩阵加法 矩阵相加为两个矩阵对应的元素相加; A = np.array([1,2],[3,4]) B = np.array([4,5],[5,6]) C = A + B = [[5, 7],[8, 10]] 如标量与矩阵相加规则为:标量与矩阵中对应的每个元素相加; 广播   广播为Numpy的机制,使得Numpy可以处理各个不同形状(shape)之间的操作,较小的阵列将会被扩充以匹配较大的阵列形状;   就如上面使用标量与矩阵做相加元素,实际上Numpy把标量转成了与矩阵相同维度的矩阵与该矩阵进行相加;   比如一个3 x 2 矩阵与一个3 x 1矩阵相加,Numpy会自动把3 x 1矩阵复制一列形成3 x2矩阵与该3 x 2矩阵相加,使得两个矩阵的shape能够匹配; 矩阵乘法   矩阵乘法与矩阵加法规则并不一样