如上所述,布尔索引也会改写数组。它有两个常见的函数,分别是np.where和np.clip: ? 向量运算 算术运算是NumPy速度最引入注目的地方之一。...根据规则,一维数组被隐式解释为二维行向量,因此通常不必在这两个数组之间进行转换,相应区域用灰色标出。 矩阵操作 连接矩阵有两个主要函数: ? 这两个函数只堆叠矩阵或只堆叠向量时,都可以正常工作。...fromfunction如上所述,仅使用I和J参数一次调用提供的函数。 但是实际上,在NumPy中有一种更好的方法。无需在整个矩阵上耗费存储空间。...除了在二维或三维数组上初始化外,meshgrid还可以用于索引数组: ? 矩阵统计 就像之前提到的统计函数一样,二维数组接受到axis参数后,会采取相应的统计运算: ?...矩阵排序 尽管axis参数对上面列出的函数很有用,但对二维排序却没有帮助: ? axis绝不是Python列表key参数的替代。
事实上,所有用于创建填充了常量值的数组的函数都带有 _like 的形式: NumPy 中有两个函数能用单调序列执行数组初始化: 如果你需要类似 [0., 1., 2.]...矩阵:二维数组 NumPy 曾有一个专门的 matrix 类,但现在已经弃用了,所以本文会交替使用「矩阵」和「二维数组」这两个术语。...随机矩阵生成的句法也与向量的类似: 二维索引的句法比嵌套列表更方便: view 符号的意思是当切分一个数组时实际上没有执行复制。当该数组被修改时,这些改变也会反映到切分得到的结果上。...默认情况下,一维数组会被视为二维运算中的行向量,因此当用一个矩阵乘以一个行向量时,你可以使用形状 (n,) 或 (1, n)——结果是一样的。...矩阵操作 合并数组的函数主要有两个: 这两个函数适用于只堆叠矩阵或只堆叠向量,但当需要堆叠一维数组和矩阵时,只有 vstack 可以奏效:hstack 会出现维度不匹配的错误,原因如前所述,一维数组会被视为行向量
numpy可以说是Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas,sklearn等一些Python机器学习和科学计算库,因此在此总结一下常用的用法。...可以采用bool型的方式对数组进行索引和切片操作 其实多维数组的索引还是很好理解的,例如下例中,我们可以看到对于一个张量,也就是b,对其索引是,[i,j,k]中的i表示选择第几个二维数组,然后j表示取二维数组中的第几个行向量...只要数组中有一个值为True,则any()返回True;而只有数组的全部元素都为True,all()才返回True。...想要了解更多的numpy自带的ufunc函数,可以查看这篇博客: 自定义ufunc函数:frompyfunc(func,nin,nout) 函数可以将计算单个值的函数转换成一个可对数组中每个元素进行计算的...a是一个N*N的二维数组,而b是一个长度为N的一维数组,solve函数找到一个长度为N的一维数组x,使得a和x的矩阵乘积正好等于b,数组x就是多元一次方程组的解。
Fancy Indexing 首先创建一个向量。 import numpy as np x = np.arange(16) 我们可以对向量进行和 Python 列表一样的索引和切片操作。...通过结果也可以看出,np.array([x[3], x[5], x[8]) 和这种 Fancy Indexing 的方式是等价。 如果指定 index 为一个二维矩阵。...,返回的是一个与二维矩阵相同形状的 bool 数组。...print(np.sum(x <= 3)) # 4 NumPy 中有一个 np.cout_nonzero 函数,能够统计传入函数的数组中有多少个非零元素,对于传入的是 bool 数组,对应的 True...x > 3 和 x 的是两个形状相同的布尔数组,这里希望两个布尔数组按照相应的索引位置进行与的运算,相当于把两个布尔数组中的每个元素看成是一个位。
接着我们利用了一个变形技术reshape把A转换成一个二维数组,然后用一维索引得到变形后的第二行所有元素。 运行结果: 第一个打印结果是3,不知道大家猜对了没有。...我们首先用numpy.eye()函数建立了一个5乘以5的单位矩阵。先测试一下二维索引中单体索引,A[2,2]和A[2][2]两种方式都是可以的。...接着我们测试一下范围索引,第一个[1]表示A矩阵的第二行:[0 1 0 0 0];后面的[0:4:2]其实只能索引出来两个数字,就是0和3两个位置上的数字。...整数数组索引是一个坐标形式的索引,比如你想要采集一个矩阵中(1,0),(2,1),(2,2)这三个位置的元素,那么你可以将他们一起打包成一个数组,然后一起索引。...第17代码其实给出布尔运算的一步,输出结果为:大于5的位置是True而小于5的位置是False,接着通过真假关系带入A数组,最终把真的元素挑出来。这就是布尔索引的运算过程。
np 的高级索引,不像 python 只能用字符和数字做索引,np 还可以用整形矩阵和布尔型矩阵来进行索引,虽然平时可能用的并不多。...还可以用多维矩阵做索引,有点类似函数的感觉,看个例子就知道了 改变 shape 前面就已经给出了几个改变 array 的 shape 的方法了,在 np 中有 ndarray.reshape,ndarray.T...堆叠有水平堆叠 np.hstack 和垂直堆叠 np.vstack,两个函数都接受一个 tuple 参数,tuple 中是要进行合并的两个矩阵,既然要合并的话,两个矩阵在合并方向上的维度大小一定要一致才行...np 中有点不同,如果直接将矩阵赋值给另一个矩阵,相当于没有拷贝,只是给矩阵换了个名字而已,因此如果有 a = b,b 改变的同时 a 也会改变。...,可以用 dot 来计算两者的点积,是一个数,当两个矩阵是二维矩阵时,用 dot 得到的是一个矩阵。
例如,你可以使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。 ...索引:比较矩阵和二维数组 注意NumPy中数组和矩阵有些重要的区别。NumPy提供了两个基本的对象:一个N维数组对象和一个通用函数对象。其它对象都是建构在它们之上的。...对数组和矩阵,索引都必须包含合适的一个或多个这些组合:整数标量、省略号(ellipses)、整数列表;布尔值,整数或布尔值构成的元组,和一个一维整数或布尔值数组。...矩阵可以被用作矩阵的索引,但是通常需要数组、列表或者其它形式来完成这个任务。 像平常在Python中一样,索引是从0开始的。...对二维数组使用一个冒号产生一个一维数组,然而矩阵产生了一个二维矩阵。10例如,一个M[2,:]切片产生了一个形状为(1,4)的矩阵,相比之下,一个数组的切片总是产生一个最低可能维度11的数组。
例如,你可以使用 array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。...更多细节可以从这个文档找到。 花哨的索引和索引技巧 NumPy比普通Python序列提供更多的索引功能。除了索引整数和切片,正如我们之前看到的,数组可以被整数数组和布尔数组索引。...索引:比较矩阵和二维数组 注意NumPy中数组和矩阵有些重要的区别。NumPy提供了两个基本的对象:一个N维数组对象和一个通用函数对象。其它对象都是建构在它们之上 的。...矩阵可以被用作矩阵的索引,但是通常需要数组、列表或者 其它形式来完成这个任务。 像平常在Python中一样,索引是从0开始的。...对二维数组使用一个冒号产生一个一维数组,然而矩阵产生了一个二维矩阵。10例如,一个M[2,:]切片产生了一个形状为(1,4)的矩阵,相比之下,一个数组的切片总是产生一个最低可能维度11的数组。
例如,你可以使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。 ...索引:比较矩阵和二维数组 注意NumPy中数组和矩阵有些重要的区别。NumPy提供了两个基本的对象:一个N维数组对象和一个通用函数对象。其它对象都是建构在它们之上 的。...对数组和矩阵,索引都必须包含合适的一个或多个这些组合:整数标量、省略号 (ellipses)、整数列表;布尔值,整数或布尔值构成的元组,和一个一维整数或布尔值数组。...矩阵可以被用作矩阵的索引,但是通常需要数组、列表或者 其它形式来完成这个任务。 像平常在Python中一样,索引是从0开始的。...对二维数组使用一个冒号产生一个一维数组,然而矩阵产生了一个二维矩阵。10例如,一个M[2,:]切片产生了一个形状为(1,4)的矩阵,相比之下,一个数组的切片总是产生一个最低可能维度11的数组。
特别的,两个函数的可选参数有着不同的含义,而且np.sum函数可以处理多维数组运算,我们将在后续章节看到。...,上例中我们需要对a和b两个数组都进行广播才能满足双方是相同的形状,最后的结果是一个二维的数组。...2.3.2.绘制二维函数的图形 广播还有一个很有用的场景,就是当你需要绘制一个二维函数的图像时。...但是这张图并没有帮助我们了解一些我们希望得到的数据:例如,一年之中有多少天在下雨?下雨的日子中降水量的平均值是多少?一年之中有多少天降水量超过半英寸?...3.3.操作布尔数组 对于一个布尔数组,你可以进行许多有用的操作。我们继续使用上面我们创建的二维数组x来说明。
首先,让我们先从布尔函数说起。 布尔函数 (以下是布尔函数的解释,熟悉编程的同学可以直接跳到第二部分。) 我们知道,数字电路都由逻辑门的组合实现任意功能,最常见的两种逻辑门是与门和或门。...同样在输入是(1,1)的情况下,与门会非常敏感,只要其中一个输入发生变化,结果就会变成0。而或门只有两个输入全部发生变化的时候,结果才会变为0。 与门和或门只有两个bit的输入,是最简单的情形。...因此,从立方体中的一个顶点移到它的相邻顶点,就相当于把布尔函数输入中的某个比特进行翻转。(妙啊!) 既然布尔函数的输入可以用顶点坐标来表示,那么输出呢?我们可以用两种颜色来定义。...如果在某种情况下,输入结果的任何一位发生翻转,输出结果都会从1变成0,那也就意味着这个蓝点周围都是红点,,没有蓝点与它直接相连。 一个点周围与它异色的点的数量,等于布尔函数在这个顶点的敏感度。...这个定理将矩阵与它的子矩阵的特征值联系起来,使其成为研究高低维立方体之间关系的完美工具。二维立方体(正方形)是三维立方体的一个面,因此是后者的一个子集。
Python 还内置了复数类型;可以在文档中找到所有详细信息。 布尔值Booleans 布尔值:Python 实现了所有标准的布尔逻辑运算符,但使用的是英文单词而不是符号(&&、|| 等.)...在 Python 中,布尔值是用来表示真(True)或假(False)的值。布尔值可以用于条件语句、循环和逻辑运算。...下面是一个例子: import numpy as np # 创建一个二维数组 a = np.array([[1,2], [3, 4], [5, 6]]) # 创建一个布尔数组,指示哪些元素大于 2...要计算向量的内积、将向量乘以矩阵或乘以矩阵,使用 dot 函数。dot 函数既可以作为 NumPy 模块中的函数使用,也可以作为数组对象的实例方法使用。...如果两个数组在某个维度上大小相同,或者其中一个数组在该维度的大小为1,则这两个数组在该维度上是兼容的。 如果两个数组在所有维度上都兼容,则它们可以一起广播。
线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行; matrix对象由matrix类创建,其四则运算都默认采用矩阵运算,...: 对于ndarray对象,numpy提供多种矩阵乘积运算:dot()、inner()、outer() dot():对于两个一维数组,计算的是这两个数组对应下标元素的乘积和,即:内积;对于二维数组..., 21]]) 解线性方程组 对矩阵更加高级的运算在numpy的linalg模块中可以找到: np.linalg.solve()传入两个参数数组,a为N*N的二维数组,b为长度为N的一维数组...掩码数组 numpy.ma模块中提供掩码数组的处理,这个模块中几乎完整复制了numpy中的所有函数,并提供掩码数组的功能; 一个掩码数组由一个正常数组和一个布尔数组组成,布尔数组中值为True的...load()会自动识别npz>文件,并且返回类似字典的对象,通过数组名为键,可以提取其中的数组; savetxt()、loadtxt()函数可以读写保存一维而二维数组的文本文件,输出>为间隔符分开的文本
前言 NumPy是Python的一个扩展库,负责数组和矩阵运行。相较于传统Python,NumPy运行效率高,速度快,是利用Python处理数据必不可少的工具。...代码: A = np.eye(5) print (A[2,2], A[2][2]) print (A[1][0:4:2]) 讲解: 我们首先用numpy.eye()函数建立了一个5乘以5的单位矩阵。...接着我们测试一下范围索引,第一个[1]表示A矩阵的第二行:[0 1 0 0 0];后面的[0:4:2]其实只能索引出来两个数字,就是0和3两个位置上的数字。...第17代码其实给出布尔运算的一步,输出结果为:大于5的位置是True而小于5的位置是False,接着通过真假关系带入A数组,最终把真的元素挑出来。这就是布尔索引的运算过程。...注意到在print函数中,我们给参数end赋值了一个空格字符串,目的是让打印出来的元素可以被空格间隔。
比如,zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。...np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x,y)对): In [155]: points = np.arange(-5, 5, 0.01) # 1000...不像某些语言(如MATLAB),通过*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。...中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。...只要给numpy.random的函数传入一个二元元组就可以产生一个二维数组,然后我们就可以一次性计算5000个随机漫步过程(一行一个)的累计和了: In [258]: nwalks = 5000 In
在实际的问题解决中,很多问题都可以转化为数组的处理问题,通过学习数组,学生们可以更加清晰地思考问题,并给出有效的解决方案。...例如,在处理图像数据时,可以使用二维数组来表示像素矩阵,其中每个元素代表一个像素的颜色或亮度值。在处理表格数据时,可以使用二维数组来表示行和列之间的关系,其中每个元素包含一个特定的值。...第一维的大小是3,表示有3个元素,每个元素是一个一维数组;第二维的大小是4,表示每个一维数组中有4个元素。在实际应用中,可以根据需要声明和初始化不同类型和大小的二维数组。...总之,二维数组是一种非常基础和重要的数据结构,在程序设计和数据处理中有着广泛的应用。 矩阵运算 java做矩阵运算的时候虽然没有python方便,但是更快一些。...C } // 主函数,用于测试矩阵运算函数 public static void main(String[] args) { // 定义两个矩阵A和B
比如,zeros 和 ones 分别可以创建指定长度或形状的全0或全1数组。empty 可以创建一个没有任何具体值的数组。...np.meshgrid 函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x,y)对): In [155]: points = np.arange(-5, 5, 0.01) # 1000...不像某些语言(如MATLAB),通过*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。...中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。...只要给numpy.random的函数传入一个二元元组就可以产生一个二维数组,然后我们就可以一次性计算5000个随机漫步过程(一行一个)的累计和了: In [258]: nwalks = 5000 In
领取专属 10元无门槛券
手把手带您无忧上云