二、MATLAB的处理 1.建立矩阵 MATLAB中,矩阵是默认的数据类型。它把向量看做1×N或者N×1的矩阵。 %建立了一个行向量,不同元素之间使用空格或者逗号分开都是可以的。 ...A=[1,2,3] 或者 A=[1 2 3] %建立一个矩阵,使用分号隔开不同的行。 A=[1,2,3;4,5,6] %那么,建立一个列向量就好办了。每行一个元素,分号分开即可。...X=diag(v,k)和v=diag(X,k) %前者用矢量v中的元素生成一个对角矩阵,k是对角移位因子,默认为0,即主对角。k>0,对角线右移。后者返回矩阵X的对角元素,存在矢量v中。...此处和MATLAB的二维数组(矩阵)的建立有很大差别。 同样,numpy中也有很多内置的特殊矩阵: b1=np.zeros((2,3)) #生成一个2行3列的全0矩阵。...在numpy中,也有一个计算矩阵的函数:funm(A,func)。 5.索引 numpy中的数组索引形式和Python是一致的。
1)点乘(即“ * ”) ---- 各个矩阵对应元素做乘法 若 w 为 m*1 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。 ?...若 w 为 m*n 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。 ?...w的列数只能为 1 或 与x的列数相等(即n),w的行数与x的行数相等 才能进行乘法运算; 2)矩阵乘 ---- 按照矩阵乘法规则做运算 若 w 为 m*p 的矩阵,x 为 p*n 的矩阵,那么通过矩阵相乘结果就会得到一个... m*n 的矩阵。...只有 w 的列数 == x的行数 时,才能进行矩阵乘法运算; ?
4.2.1 矩阵的数组表示 【数据结构】数组和字符串(一):矩阵的数组表示 4.2.2 特殊矩阵的压缩存储 矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。...但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造成很大的空间浪费。...稀疏矩阵是指大部分元素为零的矩阵,而十字链表可以有效地存储和操作这种类型的矩阵。在稀疏矩阵的十字链表中,每个非零元素都由一个节点表示。...节点包含了几个字段: LEFT:指向该节点在同一行中的左邻非零元素的地址信息。 UP:指向该节点在同一列中的上邻非零元素的地址信息。 ROW:存储该节点在矩阵中的行号。...由于行和列都是循环链表,行表头节点 BASEROW[i] 中的 LEFT 指针循环地链接到该行最右边的非零元素,列表头节点 BASECOL[j] 中的 UP 指针循环地链接到该列最下边的非零元素。
输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输出:8 解释:矩阵中共有 8 个负数。...} } return count; } } 第一个for循环控制行,...第二个while循环来二分查找, 让Low=high 结束找到第一个负数开始出现的下标(此时 Low=high=第一个负数下标), 让count+(总长度-low)
(所谓可分指可以没有误差地分开;线性不可分指有部分样本用线性分类面划分时会产生分类误差的情况。) 判断是否线性可分:不同样本集用凸包包起来,判断不同凸包的边是否有交叉。...一矩阵:一矩阵即所有元素皆为1的矩阵。对称矩阵:是指以主对角线为对称轴,各元素对应相等的矩阵。...稀疏矩阵:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。...(相当于线性变换矩阵A与缩放系数λ是等价的) 其中λ为缩放系数,也称为特征向量x的特征值。...奇异值类似于下图: 将矩阵分解为用户对哪种类型的书和这本书更偏向于哪种特征和偏好的权重有多大,算到对一本新书的评价。
方法生成的是原数组的视图,无需占有内存空间,但视图的改变会影响到原数组的变化。...也可以aaa.sum(axis),分别求每一行或者是每一列的元素之积 累计积:cumprod() all() :如果所有元素为真,返回真;否则返回假 特征值 :linalg.eigvals()...np.sin(a)对矩阵a中每个元素取正弦,sin(x)np.cos(a)对矩阵a中每个元素取余弦,cos(x)np.tan(a)对矩阵a中每个元素取正切,tan(x)np.arcsin(a)对矩阵a中每个元素取反正弦..., 122]) (5)求最大值,最小值: 获得矩阵中元素最大最小值的函数分别是max和min,可以获得整个矩阵、行或列的最大最小值。 ...PCA 白化的一个缺点是会增加数据中的噪声,因为它把输入数据的所有维度都延伸到相同的大小,这些维度中就包含噪音维度(往往表现为不相关的且方差较小)。
,无需占有内存空间,但视图的改变会影响到原数组的变化。...也可以aaa.sum(axis),分别求每一行或者是每一列的元素之积 累计积:cumprod() all() :如果所有元素为真,返回真;否则返回假 特征值 :linalg.eigvals() 返回...np.exp(a) 对矩阵a中每个元素取指数函数,ex np.sqrt(a) 对矩阵a中每个元素开根号√x (4)累计和: aaa.cumsum() 2 结果为:array([ 10, 19,...27, 34, 40, 45, 87, 120, 122]) (5)求最大值,最小值: 获得矩阵中元素最大最小值的函数分别是max和min,可以获得整个矩阵、行或列的最大最小值。...PCA 白化的一个缺点是会增加数据中的噪声,因为它把输入数据的所有维度都延伸到相同的大小,这些维度中就包含噪音维度(往往表现为不相关的且方差较小)。
__version__) 结果如下: 用于生成array的数据源中如果有多种类型的元素,转成NumPy数组的时候,会统一成精度更高的元素 NumPy数组有个dtype属性,用来描述数组中每个元素的类型...,结果是数组中每个元素相加: 还可以做平方运算: dot方法是点乘,既a的行与b的列,每个元素相乘后再相加,得到的值就是新矩阵的一个元素: 除了用数组的dot做点乘,还可以将两个矩阵对象直接相乘...和jk相乘后,变为ik,j维度消失了: 上图的ij,jk->ik改成ij,jk->,既结果是零维,矩阵相乘就变成了内积计算: 关于轴 约减,即减少元素的数量,以sum方法为例,例如一个2行2列的二维数组...) 数据访问 slice:分片参数 transpose:转置二维数组 ravel:展平多维数组,返回值是原值的视图,修改返回值会导致原值被改 flatten:展平多维数组,返回值是新的内存对象,修改返回值不会影响原值...广播 NumPy的广播,也叫张量自动扩张,在两个数组实施运算的时候,如果两个数组形状不同,可以扩充较小数组来匹配较大数组的形状 一维数组与单个数字相加的时候,单个数字会被扩充为数组,值就是它自己
order=)数组,新形状,"C"-按行、"F"-按列、"A"-原顺序、"k"-元素在内存中痴线顺序 △ n.flat()数组元素迭代器。...=)返回展开数组,修改会影响原数组 n.rollaxis(arr, axis, start)向后滚动指定的轴,arr:数组,axis:要向后滚动的轴,其它轴的相对位置不会改变,start:默认为零...7、NumPy 线性代数 △ n.dot() 数组元素的点积,即元素对应相乘 △ n.matmul() 两个数组的矩阵积4 △ n.linalg.det() 求行列式的值 △ n.linalg.inv...中的矩阵合并 列合并/扩展:np.column_stack() 行合并/扩展:np.row_stack() numpy.ravel() 与numpy.flatten() numpy.flatten()返回一份拷贝...,对拷贝所做的修改不会影响(reflects)原始矩阵, numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。
numpy的功能: 提供数组的矢量化操作,所谓矢量化就是不用循环就能将运算符应用到数组中的每个元素中。...numpy.zeros((3,4))生成指定元素0的3行4列矩阵。...numpy.hstack((A,B,C))左右合并矩阵数组A,B,C。 ndarray[:,numpy.newaxis]增加列的维度。对于单行横矩阵,变成单行列矩阵。...)创建矩阵,矩阵的行与行用分号隔开,也可以传入已有矩阵,但是不会创建副本 ....0),a)从a中抽取能被2整除的元素 np.nonzero(a)抽取非0元素 np.outer(a数组,b数组)a数组的元素*b数组行,生成二维数组 金融专用函数 np.fv()
逆矩阵存在的充要条件 逆矩阵计算公式 其中 是伴随矩阵,其存在没有限制条件,当然也不会影响逆矩阵的存在性。而矩阵的行列式 存在于分母上,其值不能为零。...,而是通过行列初等行变换/列变换将其整合成一个梯形的行列式 由于梯形行列式下半部分为0,整个矩阵的行列式其实就是梯形行列式对角线上的元素相乘。...简单来说,只要对角线上没有一个元素为0,则这个矩阵中绝对不可能存在全为0的行或列。...矩阵行与行或列于列之间相互独立,其矩阵的行列式经初等变换后的对角线上没有任何元素特别接近于0,因此矩阵求得的参数向量不会对模型产生影响,对拟合结果也是较理想的。...当然了, 挤占了 中由原始的特征矩阵贡献的空间,因此 如果太大,也会导致的估计出现较大的偏移,无法正确拟合数据的真实面貌。我们在使用中,需要找出 让模型效果变好的最佳取值。
基本运算 四则运算中,加法和减法在 np 中还是通用的,因为 np 主要操作对象是矩阵,所以乘法除法另说,* 在 np 中指的是对每一个元素进行的乘法(elementwise),矩阵相乘在 np 中用...@ 或者 np.dot 来操作,没有除法,只有用 np.linalg.inv 对矩阵进行求逆矩阵操作 除此之外,np 也可以对 array 的每一列每一行都进行操作,比如求每一行或每一列的最大最小值,...堆叠有水平堆叠 np.hstack 和垂直堆叠 np.vstack,两个函数都接受一个 tuple 参数,tuple 中是要进行合并的两个矩阵,既然要合并的话,两个矩阵在合并方向上的维度大小一定要一致才行...np 中有点不同,如果直接将矩阵赋值给另一个矩阵,相当于没有拷贝,只是给矩阵换了个名字而已,因此如果有 a = b,b 改变的同时 a 也会改变。...(值得注意的是 np 的切片返回的是原矩阵的浅拷贝,见下图中的例子) 深拷贝用 np.copy() 实现,深拷贝并不会和原矩阵共享任何东西,原矩阵有任何变化都不会影响深拷贝得到的矩阵 线性代数 np
矩阵及其运算 矩阵一般是一个 m 行 n 列的矩形阵列,一般的表达方式如下图所示: ? 矩阵中每个元素都有 m 和 n 两个下标,分别代表行和列的位置,所以矩阵也可以通过索引直接定位元素的值。...矩阵的加减法操作跟向量类似,也是对应位置进行相加减。如图所示,红色和绿色的框分别代表了不同位置数字的计算过程: ?...设 a 为 m 行 p 列的矩阵,b 为 p 行 n 列的矩阵,相乘的结果为一个 m 行 n 列的新矩阵,其中第 i 行第 j 列(1≤i≤m,1≤j≤n)的元素为: ? ?...在设计模型的过程中,我们有时会使用到大量的特征(例如在推荐系统中,特征维度都是上亿的),每个特征都会从不同的角度体现问题的不同信息。...这些特征经过某些方式的组合、变换、映射之后,会按照不同的权重得到最终的结果。
Pandas适用于处理包含不同变量类型(整数、浮点)的表格数据,和Matlab不同,Python的索引是从0开始的。...获取数组元素:a[0] **a[-1]**表示最后一个元素 二维数组:a=numpy.array(([1,2,3],[4,5,6])) 2行3列数组 这时a.shape输出**(2,3)**表示2行...1,其它为0的举证):a=numpy.eye(10) 生成随机矩阵:a=numpy.random.random([2,3]) 区域矩阵获取:**a=a[0:2,0:2]**表示从第1行到第2行,不包括第...2.4.2矩阵基础 矩阵乘法–点积:要求a的n列等于b的n行,也就是a的行乘以b的列。 ? 矩阵乘法–元素积:python代码为multiply(a,b) ?...条件概率:在A事件发生的情况下,B事件发生的概率,表示A和B有交集。 联合分布:表示2个不相关的分布,联合组成的概率事件。
NumPy是Python数组计算、矩阵运算和科学计算的核心库。...提供了高性能的数组对象 提供了大量的函数和方法 NumPy使用机器学习中的操作变得简单 NumPy是通过C语言实现的 NumPy的安装 pip install numpy 数组的分类 一维数组 跟Python...列表的形状一样,区别在于数组的切片是针对原始数组 二维数组 以数组作为数组元素,二维数组包括行和列,类似于表格,又称为矩阵 三维数组(多维数组) 为数为三的数组元素,也称矩阵列表 轴的概念 :轴是NumPy... 重塑后数组所包含的元素个数必须与原数组的元素个数相同,元素发生变化,程序就会报错 数组转置 数组的行列转换 通过数组的T属性和transpose方法实现 数组的增加 水平方向增加数据...在NumPy中,矩阵是数组的分支,二维数组也称为矩阵 。
这是矩阵运算的时间复杂度增加的问题,随着矩阵的大小而增加。 当我们考虑到即使是琐碎的机器学习方法可能需要对每一行、列甚至整个矩阵进行许多操作时,这个问题也会变得更加复杂,从而导致执行时间大大延长。...矩阵的每一行存储为一个列表,每个子列表包含列索引和值。 Coordinate List。一个元组的列表存储在每个元组中,其中包含行索引、列索引和值。...与压缩的稀疏行方法相同,除了列索引外,在行索引之前被压缩和读取。 被压缩的稀疏行,也称为CSR,通常被用来表示机器学习中的稀疏矩阵,因为它支持的是有效的访问和矩阵乘法。...此外,使用NumPy数据结构的机器学习库也可以在SciPy稀疏数组上透明地进行操作,例如用于一般机器学习的scikit-learn和用于深度学习的Keras。...不过,我们可以很容易地计算出矩阵的密度,然后从一个矩阵中减去它。NumPy数组中的非零元素可以由count_nonzero()函数给出,数组中元素的总数可以由数组的大小属性给出。
NumPy 数组和 Python 列表 乍一看,NumPy 数组与 Python 列表类似。它们都可作为容器,能够快速获取和设置元素,但插入和移除元素会稍慢一些。...你可以使该区间的末端落在一个非整数的 step 数中(solution1),但这会降低代码的可读性和可维护性。这时候,linspace 就可以派上用场了。它不受舍入的影响,总能生成你要求的元素数值。...矩阵:二维数组 NumPy 曾有一个专门的 matrix 类,但现在已经弃用了,所以本文会交替使用「矩阵」和「二维数组」这两个术语。...矩阵算术运算 除了逐元素执行的常规运算符(比如 +、-、、/、//、*),这里还有一个计算矩阵乘积的 @ 运算符: 我们已在第一部分介绍过标量到数组的广播,在其基础上进行泛化后,NumPy 支持向量和矩阵的混合运算...,甚至两个向量之间的运算: 二维数组中的广播 行向量和列向量 正如上面的例子所示,在二维情况下,行向量和列向量的处理方式有所不同。
NumPy 数组和 Python 列表 乍一看,NumPy 数组与 Python 列表类似。它们都可作为容器,能够快速获取和设置元素,但插入和移除元素会稍慢一些。...你可以使该区间的末端落在一个非整数的 step 数中(solution1),但这会降低代码的可读性和可维护性。这时候,linspace 就可以派上用场了。它不受舍入的影响,总能生成你要求的元素数值。...一种查找元素的方法是 np.where(a==x)[0][0],但这个方法既不优雅,速度也不快,因为它需要检查数组中的所有元素,即便所要找的目标就在数组起始位置也是如此。...矩阵:二维数组 NumPy 曾有一个专门的 matrix 类,但现在已经弃用了,所以本文会交替使用「矩阵」和「二维数组」这两个术语。...,甚至两个向量之间的运算: 二维数组中的广播 行向量和列向量 正如上面的例子所示,在二维情况下,行向量和列向量的处理方式有所不同。
随着数据集的规模和复杂性的增长,特征或维度的数量往往变得难以处理,导致计算需求增加,潜在的过拟合和模型可解释性降低。降维技术提供了一种补救方法,它捕获数据中的基本信息,同时丢弃冗余或信息较少的特征。...缺点 对异常值的敏感性:LDA对异常值非常敏感,异常值的存在会影响方法的性能。 正态性假设:LDA假设每个类中的特征是正态分布的,如果违反了这个假设,它可能无法很好地执行。...r是矩阵M的秩。 Σ的对角线元素为原矩阵M的奇异值,按降序排列。U的列是m的左奇异向量,这些向量构成了m的列空间的正交基,V的列是m的右奇异向量,这些向量构成了m的行空间的正交基。...数值稳定性:奇异值分解在数值上是稳定的,适合于求解病态系统中的线性方程。 正交性:SVD分解中的矩阵U和V是正交的,保留了原矩阵的行与列之间的关系。...PCA和SVD关注的是总体方差。 数据特征:数据的特征,如线性、类别分布和异常值的存在,会影响选择。 特定于应用程序的需求:考虑应用程序的特定需求,例如可解释性、计算效率或对丢失数据的处理。
数组的元素如果也是数组(可以是 Python 的原生 array,也可以是 ndarray)的情况下,则构成了多维数组。 NumPy 数组便于对大量数据进行高级数学和其他类型的操作。...ndarray中的元素 这里主要是提供了一些访问、更改或增加ndarray中某一元素的基础方法。...在三维数据中,axis = 0表示组,1表示行,2表示列。这是为什么呢?提示一下,三位数组的shape中组、行和列是怎样排序的? 所以,axis的赋值一定要考虑数组的shape。...往ndarray中增加元素的办法跟python list也很类似,常用的有两种: 一种是添加(append),就是将新增的元素添加到ndarray的尾部 语法为:np.append(ndarray,...相同的是: 二者都可以使用参数axis来决定依照哪个轴进行排序,axis = 0时按照列排序,axis = 1时按照行排序; 不同的是: np.sort()不会更改原数组;ndarray.sort()会更改原数组
领取专属 10元无门槛券
手把手带您无忧上云