矩阵转置

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是通过寻找方差最大的轴(在一类中

LDA

北战南征 提交于 2019-11-30 16:17:35
    在 主成分分析(PCA)原理总结 中,我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。     在学习LDA之前,有必要将其自然语言处理领域的LDA区别开来,在自然语言处理领域, LDA是隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),他是一种处理文档的主题模型。我们本文只讨论线性判别分析,因此后面所有的LDA均指线性判别分析。 1. LDA的思想     LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。     可能还是有点抽象,我们先看看最简单的情况。假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近

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中的数组和矩阵的问题汇总

泄露秘密 提交于 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

举例说明协方差矩阵的运算

喜你入骨 提交于 2019-11-30 13:14:29
均值,方差,协方差的运算公式 举例说明 代码演示 import numpy as np a = np.mat([[10, 15, 29], [15, 46, 13], [23, 21, 30], [11, 9, 35]]) a_mean = a.mean(axis = 0) # 求每列的均值 a_d_mean = a - a_mean # 去均值的矩阵 cov_x_y = np.dot(a_d_mean[:, 0].T, a_d_mean[:, 1]) / 3 # 26.58333333 cov_x_z = np.dot(a_d_mean[:, 0].T, a_d_mean[:, 2]) / 3 # -6.08333333 cov_y_z = np.dot(a_d_mean[:, 1].T, a_d_mean[:, 2]) / 3 # -152.08333333 a_cov = np.cov(a.T) # np 自带的矩阵计算公式 记住一定要转置 a_cov2 = np.dot(a_d_mean.T, a_d_mean) / (4 - 1) # 协方差矩阵还可以这样计算,先让样本矩阵中心化,即每一维度减去该维度的均值,使每一维度上的均值为0,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可 a_cov == a_cov2 # 结果相等 来源: CSDN 作者:

正定矩阵、负定矩阵、半正定矩阵、半负定矩阵

一个人想着一个人 提交于 2019-11-30 13:13:45
正定矩阵、负定矩阵、半正定矩阵、半负定矩阵 载 ▼ 1.正定矩阵 一个 n × n 的实 对称矩阵 M 是 正定 的, 当且仅当 对于所有的非零实系数 向量 z ,都有 z T M z > 0 。其中 z T 表示 z 的 转置 。 2.负定矩阵 与正定矩阵相对应的,一个 n × n 的埃尔米特矩阵 是 负定矩阵 当且仅当对所有不为零的 (或 ),都有: 3. 半正定矩阵 是 半正定矩阵 当且仅当对所有不为零的 (或 ),都有: 4. 半负定矩阵 是 半负定矩阵 当且仅当对所有不为零的 (或 ),都有: 正定阵的判别 [ 编辑 ] 对 n × n 的 埃尔米特矩阵 M ,下列性质与“ M 为正定矩阵”等价: 1. 矩阵 的所有的 特征值 都是正的。根据 谱定理 , M 必然与一个实 对角矩阵 D 相似 (也就是说 ,其中 P 是 幺正矩阵 ,或者说 M 在某 个 正交基 可以表示为一个实 对角矩阵 )。因此, M 是正定阵当且仅当相应的 D 的对角线上元素都是正的。 2. 半双线性形式 定义了一个 C n 上的 内积 。实际上,所有 C n 上的内积都可看做由某个正定阵通过此种方式得到。 3. M 是 n 个线性无关的 k 维向量 的 Gram矩阵 ,其中的 k 为某个正整数。更精确地说, M 定义为: 换句话说, M 具有 的形式,其中 A 不一定是方阵,但需要是单射的。 4.

矩阵求导与实例

别来无恙 提交于 2019-11-30 13:13:06
缘由 布局 求导的类别 从简单的例子说起 实例 SVM的对偶形式转换 Soft-SVM对偶形式转换 线性回归 logistic回归 参考资料 缘由 机器学习的很多算法表示中都采用了矩阵的形式,对算法的描述分析中就涉及到了对向量、对矩阵的求导。 比如SVM、linear regression的推导等。 布局 矩阵求导有两种布局: 分子布局(numerator layout) 分母布局(denominator layout) 下面用向量 y //--> 对标量 x //--> 求导简单说明这两种布局的区别。 我们假定所有的向量都是列向量。 y = ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ y 1 y 2 ⋮ y m ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ //--> 在分子布局下: ∂ y ∂ x = ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y m ∂ x ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ //--> 在分母布局下: ∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y m ∂ x ] //--> 在下面的推导中,都将采用分母布局,也就是向量(列)对标量求导的结果都是行向量。(采用这种布局的主要原因是向量对向量的求导就是一个矩阵了) 求导的类别 求导大致分为5类: 向量对标量 标量对向量 向量对向量 矩阵对向量

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能够匹配; 矩阵乘法   矩阵乘法与矩阵加法规则并不一样