网站开发工程师考试,镇江百度seo,如何了解和掌握一个网站的权重,外贸企业网站建设公司本文来源公众号“江大白”#xff0c;仅用于学术分享#xff0c;侵权删#xff0c;干货满满#xff0c;有超级详细的图解。 
原文链接#xff1a;万字长文图解Numpy教程#xff0c;看这一篇就够了#xff01; (qq.com) 
以下文章来源于博客#xff1a;Medium 
作者仅用于学术分享侵权删干货满满有超级详细的图解。 
原文链接万字长文图解Numpy教程看这一篇就够了 (qq.com) 
以下文章来源于博客Medium 
作者Lev Maximov 
编辑笑傲算法江湖 
链接https://betterprogramming.pub/numpy-illustrated-the-visual-guide-to-numpy-3b1d4976de1d 导读 
NumPy是Python的最重要的扩展程序库之一也是入门机器学习编程的必备工具。然而对初学者来说NumPy的大量运算方法非常难记。最近国外有位程序员将NumPy的基本运算以图解的方式写下来让学习过程变得轻松有趣。在Reddit机器学习社区发布不到半天就收获了500赞。 
下面就让我们跟随他的教程一起来学习吧 
教程内容分为向量 一维数组、矩阵 二维数组、三维与更高维数组3个部分。 
1 Numpy数组与Python列表 
在介绍正式内容之前先让我们先来了解一下Numpy数组与Python列表的区别。 
乍一看NumPy数组类似于Python列表。它们都可以用作容器具有获取getting和设置setting元素以及插入和移除元素的功能。 
两者有很多相似之处以下是二者在运算时的一个示例 和Python列表相比Numpy数组具有以下特点 
更紧凑尤其是在一维以上的维度向量化操作时比Python列表快但在末尾添加元素比Python列表慢。 △在末尾添加元素时Python列表复杂度为O(1)NumPy复杂度为O(N) 
2 向量运算 
2.1 向量初始化 
创建NumPy数组的一种方法是从Python列表直接转换数组元素的类型与列表元素类型相同。 NumPy数组无法像Python列表那样加长因为在数组末尾没有保留空间。 
因此常见的做法是定义一个Python列表对它进行操作然后再转换为NumPy数组或者用np.zeros和np.empty初始化数组预分配必要的空间 有时我们需要创建一个空数组大小和元素类型与现有数组相同 实际上所有用常量填充创建的数组的函数都有一个_like对应项来创建相同类型的常数数组 在NumPy中可以用arange或者linspace来初始化单调序列数组 如果需要类似[0., 1., 2.]的浮点数组可以更改arange输出的类型arange(3).astype(float)。 
但是有更好的方法arange函数对数据类型敏感如果将整数作为参数生成整数数组如果输入浮点数例如arange(3.)则生成浮点数组。 
但是arange在处理浮点数方面并不是特别擅长 这是因为0.1对于我们来说是一个有限的十进制数但对计算机而言却不是。在二进制下0.1是一个无穷小数必须在某处截断。 
这就是为什么将小数部分加到步骤arange通常是一个不太好的方法我们可能会遇到一个bug导致数组的元素个数不是我们想要的数这会降低代码的可读性和可维护性。 
这时候linspace会派上用场。它不受舍入错误的影响并始终生成要求的元素数。出于测试目的通常需要生成随机数组NumPy提供随机整数、均匀分布、正态分布等几种随机数形式 2.2 向量索引 
一旦将数据存储在数组中NumPy便会提供简单的方法将其取出 上面展示了各式各样的索引例如取出某个特定区间从右往左索引、只取出奇数位等等。但它们都是所谓的view也就是不存储原始数据。并且如果原始数组在被索引后进行更改则不会反映原始数组的改变。 
这些索引方法允许分配修改原始数组的内容因此需要特别注意只有下面最后一种方法才是复制数组如果用其他方法都可能破坏原始数据 从NumPy数组中获取数据的另一种超级有用的方法是布尔索引它允许使用各种逻辑运算符来检索符合条件的元素 
注意Python中的三元比较3a5在NumPy数组中不起作用。 
如上所述布尔索引也会改写数组。它有两个常见的函数分别是np.where和np.clip 2.3 向量运算 
算术运算是NumPy速度最引入注目的地方之一。NumPy的向量运算符已达到C级别避免了Python的慢循环。 
NumPy允许像普通数字一样操作整个数组加减乘除、整除、幂 △ 和Python中一样a//b表示div b整除x**n表示xⁿ 向量还可以与标量进行类似的运算方法相同 大多数的数学函数都有NumPy对应项用于处理向量 向量的点积、叉积也有运算符 我们也可以进行三角函数、反三角函数、求斜边运算 数组可以四舍五入为整数 △ floor取下界ceil取上界round为四舍六入五取偶 
NumPy还可以执行以下基本的统计运算最大最小值、平均值、方差、标准差 不过排序函数的功能比Python列表对应函数更少 2.4 搜索向量中的元素 
与Python列表相反NumPy数组没有index方法。 查找元素的一种方法是np.where(ax)0它既不优雅也不快速因为要查找的项需要从开头遍历数组的所有元素。  更快的方式是通过Numba中的next((i[0] for i, v in np.ndenumerate(a) if vx), -1)来加速。  一旦对数组进行排序情况就会变得更好v  np.searchsorted(a, x); return v if a[v]x else -1的复杂度为O(log N)确实非常快但是首先需要O(N log N)的排序时间。  
2.5 比较浮点数 
函数np.allclose(a, b)用于比较具有给定公差的浮点数组 np.allclose假设所有的比较数字的等级是1个单位。例如在上图中它就认为1e-9和2e-9相同如果要进行更细致的比较需要通过atol指定比较等级1np.allclose(1e-9, 2e-9, atol1e-17)  False。  math.isclose进行比较没有假设前提而是基于用户给出的一个合理abs_tol值math.isclose(0.10.2–0.3, abs_tol1e-8)  True。  
除此之外np.allclose在绝对和相对公差公式中还存在一些小问题例如对某些数存在allclose(a, b) ! allclose(b, a)。这些问题已在math.isclose函数中得到解决。 
3 矩阵运算 
NumPy中曾经有一个专用的类matrix但现在已弃用因此下面将交替使用矩阵和2D数组两个词。 
矩阵初始化语法与向量相似 这里需要双括号因为第二个位置参数是为dtype保留的。 
随机矩阵的生成也类似于向量的生成 二维索引语法比嵌套列表更方便 和一维数组一样上图的view表示切片数组实际上并未进行任何复制。修改数组后更改也将反映在切片中。 
3.1 axis参数 
在许多操作例如求和中我们需要告诉NumPy是否要跨行或跨列进行操作。为了使用任意维数的通用表示法NumPy引入了axis的概念axis参数实际上是所讨论索引的数量第一个索引是axis0第二个索引是axis1等等。 
因此在二维数组中如果axis0是按列那么axis1就是按行。 3.2 矩阵运算 
除了普通的运算符如-*///和**以元素方式计算外还有一个运算符可计算矩阵乘积 在第一部分中我们已经看到向量乘积的运算NumPy允许向量和矩阵之间甚至两个向量之间进行元素的混合运算 
3.3 行向量与列向量 
从上面的示例可以看出在二维数组中行向量和列向量被不同地对待。 
默认情况下一维数组在二维操作中被视为行向量。因此将矩阵乘以行向量时可以使用(n)或(1n)结果将相同。 
如果需要列向量则有转置方法对其进行操作 能够从一维数组中生成二位数组列向量的两个操作是使用命令reshape重排和newaxis建立新索引 这里的-1参数表示reshape自动计算第二个维度上的数组长度None在方括号中充当np.newaxis的快捷方式该快捷方式在指定位置添加了一个空axis。 
因此NumPy中总共有三种类型的向量一维数组二维行向量和二维列向量。这是两者之间显式转换的示意图 根据规则一维数组被隐式解释为二维行向量因此通常不必在这两个数组之间进行转换相应区域用灰色标出。 
3.4 矩阵操作 
连接矩阵有两个主要函数 这两个函数只堆叠矩阵或只堆叠向量时都可以正常工作。但是当涉及一维数组与矩阵之间的混合堆叠时vstack可以正常工作hstack会出现尺寸不匹配错误。 
因为如上所述一维数组被解释为行向量而不是列向量。解决方法是将其转换为列向量或者使用column_stack自动执行 堆叠的逆向操作是分裂 矩阵可以通过两种方式完成复制tile类似于复制粘贴repeat类似于分页打印。 特定的列和行可以用delete进行删除 逆运算为插入 append就像hstack一样该函数无法自动转置一维数组因此再次需要对向量进行转置或添加长度或者使用column_stack代替 实际上如果我们需要做的就是向数组的边界添加常量值那么pad函数就足够了 3.5 Meshgrid 
如果我们要创建以下矩阵 两种方法都很慢因为它们使用的是Python循环。在MATLAB处理这类问题的方法是创建一个meshgrid 该meshgrid函数接受任意一组索引mgrid仅是切片indices只能生成完整的索引范围。fromfunction如上所述仅使用I和J参数一次调用提供的函数。 
但是实际上在NumPy中有一种更好的方法。无需在整个矩阵上耗费存储空间。仅存储大小正确的矢量就足够了运算规则将处理其余的内容 在没有indexing’ij’参数的情况下meshgrid将更改参数的顺序J, I np.meshgrid(j, i)—这是一种“ xy”模式用于可视化3D图。 
除了在二维或三维数组上初始化外meshgrid还可以用于索引数组 3.6 矩阵统计 
就像之前提到的统计函数一样二维数组接受到axis参数后会采取相应的统计运算 二维及更高维度中argmin和argmax函数返回最大最小值的索引 all和any两个函数也能使用axis参数 3.7 矩阵排序 
尽管axis参数对上面列出的函数很有用但对二维排序却没有帮助 axis绝不是Python列表key参数的替代。不过NumPy具有多个函数允许按列进行排序 
1、按第一列对数组排序a[a[:,0].argsort()] argsort排序后此处返回原始数组的索引数组。 
此技巧可以重复但是必须小心以免下一个排序混淆前一个排序的结果 
a  a[a[:,2].argsort()]
a  a[a[:,1].argsort(kindstable)]
a  a[a[:,0].argsort(kindstable)] 2、有一个辅助函数lexsort该函数按上述方式对所有可用列进行排序但始终按行执行例如 a[np.lexsort(np.flipud(a[2,5].T))]先通过第2列排序再通过第5列排序  a[np.lexsort(np.flipud(a.T))]按从左到右所有列依次进行排序。  3、还有一个参数order但是如果从普通非结构化数组开始则既不快速也不容易使用。 
4、因为这个特殊的操作方式更具可读性和它可能是一个更好的选择这样做的pandas不易出错 pd.DataFrame(a).sort_values(by[2,5]).to_numpy()通过第2列再通过第5列进行排序。  pd.DataFrame(a).sort_values().to_numpy()通过从左向右所有列进行排序  
4 高维数组运算 
通过重排一维向量或转换嵌套的Python列表来创建3D数组时索引的含义为zyx。 
第一个索引是平面的编号然后才是在该平面上的移动 这种索引顺序很方便例如用于保留一堆灰度图像这a[i]是引用第i个图像的快捷方式。 
但是此索引顺序不是通用的。处理RGB图像时通常使用yxz顺序前两个是像素坐标最后一个是颜色坐标Matplotlib中是RGB OpenCV中是BGR  这样可以方便地引用特定像素a[i,j]给出像素的RGB元组(i,j)。 
因此创建特定几何形状的实际命令取决于正在处理的域的约定 显然NumPy函数像hstack、vstack或dstack不知道这些约定。其中硬编码的索引顺序是yxzRGB图像顺序是 △RGB图像数组为简便起见上图仅2种颜色 
如果数据的布局不同则使用concatenate命令堆叠图像并在axis参数中提供显式索引数会更方便 如果不方便使用axis可以将数组转换硬编码为hstack的形式 这种转换没有实际的复制发生。它只是混合索引的顺序。 
混合索引顺序的另一个操作是数组转置。检查它可能会让我们对三维数组更加熟悉。 
根据我们决定的axis顺序转置数组所有平面的实际命令将有所不同对于通用数组它交换索引1和2对于RGB图像它交换0和1 有趣的是和唯一的操作模式默认的axes参数颠倒了索引顺序这与上述两个索引顺序约定都不相符。 
最后还有一个函数可以在处理多维数组时节省很多Python循环并使代码更简洁这就是爱因斯坦求和函数einsum 文章结束感谢阅读。大家有推荐的公众号可以评论区留言共同学习一起进步。 文章转载自: http://www.morning.dmfdl.cn.gov.cn.dmfdl.cn http://www.morning.fxygn.cn.gov.cn.fxygn.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.ttvtv.cn.gov.cn.ttvtv.cn http://www.morning.klcdt.cn.gov.cn.klcdt.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.djmdk.cn.gov.cn.djmdk.cn http://www.morning.jfgmx.cn.gov.cn.jfgmx.cn http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn http://www.morning.1000sh.com.gov.cn.1000sh.com http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.wkkqw.cn.gov.cn.wkkqw.cn http://www.morning.jwpcj.cn.gov.cn.jwpcj.cn http://www.morning.hjlsll.com.gov.cn.hjlsll.com http://www.morning.ndtmz.cn.gov.cn.ndtmz.cn http://www.morning.pwzzk.cn.gov.cn.pwzzk.cn http://www.morning.hngmg.cn.gov.cn.hngmg.cn http://www.morning.crfjj.cn.gov.cn.crfjj.cn http://www.morning.dlrsjc.com.gov.cn.dlrsjc.com http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn http://www.morning.tzzkm.cn.gov.cn.tzzkm.cn http://www.morning.rdmn.cn.gov.cn.rdmn.cn http://www.morning.tbkqs.cn.gov.cn.tbkqs.cn http://www.morning.qcsbs.cn.gov.cn.qcsbs.cn http://www.morning.sfphz.cn.gov.cn.sfphz.cn http://www.morning.kfcz.cn.gov.cn.kfcz.cn http://www.morning.21r000.cn.gov.cn.21r000.cn http://www.morning.fmtfj.cn.gov.cn.fmtfj.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.hkgcx.cn.gov.cn.hkgcx.cn http://www.morning.wmpw.cn.gov.cn.wmpw.cn http://www.morning.aishuxue.com.cn.gov.cn.aishuxue.com.cn http://www.morning.fmqng.cn.gov.cn.fmqng.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.hxcrd.cn.gov.cn.hxcrd.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.wtwhj.cn.gov.cn.wtwhj.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.twwts.com.gov.cn.twwts.com http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn http://www.morning.rmfw.cn.gov.cn.rmfw.cn http://www.morning.lsbjj.cn.gov.cn.lsbjj.cn http://www.morning.zmpqt.cn.gov.cn.zmpqt.cn http://www.morning.wqwbj.cn.gov.cn.wqwbj.cn http://www.morning.gnfkl.cn.gov.cn.gnfkl.cn http://www.morning.nkjjp.cn.gov.cn.nkjjp.cn http://www.morning.lkhgq.cn.gov.cn.lkhgq.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.nhdw.cn.gov.cn.nhdw.cn http://www.morning.grpfj.cn.gov.cn.grpfj.cn http://www.morning.guanszz.com.gov.cn.guanszz.com http://www.morning.cmzgt.cn.gov.cn.cmzgt.cn http://www.morning.yfpnl.cn.gov.cn.yfpnl.cn http://www.morning.pbygt.cn.gov.cn.pbygt.cn http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.qdlnw.cn.gov.cn.qdlnw.cn http://www.morning.grryh.cn.gov.cn.grryh.cn http://www.morning.kpfds.cn.gov.cn.kpfds.cn http://www.morning.rkyw.cn.gov.cn.rkyw.cn http://www.morning.qqbjt.cn.gov.cn.qqbjt.cn http://www.morning.kyzxh.cn.gov.cn.kyzxh.cn http://www.morning.oioini.com.gov.cn.oioini.com http://www.morning.rcbdn.cn.gov.cn.rcbdn.cn http://www.morning.smry.cn.gov.cn.smry.cn http://www.morning.yhpl.cn.gov.cn.yhpl.cn http://www.morning.fhjnh.cn.gov.cn.fhjnh.cn http://www.morning.clxpp.cn.gov.cn.clxpp.cn http://www.morning.wjtxt.cn.gov.cn.wjtxt.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.rrcrs.cn.gov.cn.rrcrs.cn http://www.morning.wckrl.cn.gov.cn.wckrl.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.skqfx.cn.gov.cn.skqfx.cn http://www.morning.khxwp.cn.gov.cn.khxwp.cn http://www.morning.tfwsk.cn.gov.cn.tfwsk.cn