作者:王大伟 博客专栏:https://www./u/wangdawei/articles Python爱好者社区 唯一小编 前言最近在学习入门python可视化,先后初步探索了seaborn、matplotlib、plotly和ggplot 发现还是pandas的绘图最容易上手,样式也很商务化,学完官方文档之后和大家一起分享 言归正传,今天继续连载numpy入门系列 前文传送门:https://ask./blog/wangdawei/8708 基本操作当使用不同类型的数组时,结果得到的数组的类型对应于更一般或精确的数组(称为upcasting的行为)。 import numpy as np 注:从numpy中导入pi(π) a = np.ones(3, dtype=np.int32) 注:创建一个一行三列的矩阵(元素都是1) b = np.linspace(0,pi,3) 注:在0-π之间均匀产生三个等间隔的数字,b的类型是浮点型 c = a b c.dtype.name 注:得到的c的类型为浮点型 d = np.exp(c*1j) d.dtype.name 注:得到的是复数 许多一元操作,例如计算数组中所有元素的总和,都被实现为ndarray类的方法 a = np.random.random((2,3)) 注:产生2行3列的随机数组(元素值为0-1之间的随机数) a.sum() 注:将a数组所有元素求和 a.min() 注:返回a数组中最小的元素值 a.max() 注:返回a数组中的最大值 注意:我们看到的数组和单独取出的最大值保留的小数位数不同 默认情况下,这些操作适用于数组,就像它是数字列表一样,不管其形状如何。 但是,通过指定轴参数,您可以沿着数组的指定轴应用一个操作: b = np.arange(12).reshape(3,4) 注:通过reshape将产生的1行的数组转变为3行4列 b.sum(axis=0) 注:将每一列求和,因为指定了参数axis = 0 b.sum(axis=1) 注:按行求和 b.sum() 注:不加axis参数则是所有元素求和 b.min(axis=1) 注:求每行的最小值 b.cumsum(axis=1) 注:要学会自己查帮助文件 ?b.cumsum(axis=1) 是返回沿给定轴的元素的累加和 这是什么意思呢?画个图很好理解: 就是把前面所有的加上自己当前的值得到的结果放在当前位置,就是数列前n项累加和的意思 注意这里是按行累加 通用功能NumPy提供熟悉的数学函数,如sin,cos和exp。 在NumPy中,这些被称为“通用函数”(ufunc)。 在NumPy中,这些函数在数组上以元素方式运算,产生一个数组作为输出。 B = np.arange(3) 注:创建一个数组 np.exp(B) 注:对每个元素求e的某次方 np.sqrt(B) 注:对每个元素开方 C = np.array([2., -1., 4.]) 注:将两个数组相加(要求数组形状相同) 如果形状不同,则会报错如下: 查看这部分更多更详细的用法可以看:https://docs./doc/numpy-dev/user/quickstart.html 下图部分: 索引,切片和迭代一维数组可以被索引,切片和迭代,非常像列表和其他Python序列。 a = np.arange(10)**3 注:对数组中每个元素求3次方 a[2] 注:取出序列为2的元素 a[2:5] 注:切片操作 a[:6:2] = -1000 注: 和 a[0:6:2] = -1000相同; 从最初到序列号6(6取不到),步长为2,将-1000赋值相应的元素。 a[ : :-1] 注:数组元素逆序排列 for i in a: 注:对a数组中每个元素,求1/3次方 结果是nan的我有些不解,-10的3次方不是-1000么 于是我试了试: 希望有了解的大神留言评论指导一下,这个nan暂时跳过吧 多维数组每条轴可以有一个索引。 这些索引以逗号分隔的元组给出: def f(x,y): 注:定义一个函数,参数有两个:x,y b = np.fromfunction(f,(5,4),dtype=int) 注:我们看一下帮助: ?np.fromfunction 指的是,建立5行4列的数组,然后对每个位置元素(i,j)索引代表位置,例如(2,3)位置时, 计算函数值10*2 3=13,所以返回13,其他同理。 b[2,3] 注:我们可以取出数组中的元素值,注意行和列索引是用逗号分隔,而不是冒号(冒号是切片) b[0:5, 1] 注:按照下标索引切片 b[ : ,1] 注:按照下标索引切片 b[1:3, : ] 注:按照下标索引切片 b[-1] 注:这个相当于b[-1,:] 一些省略记法: 例如五维的数组:
c = np.array( [[[ 0, 1, 2], c.shape 注:这是一个三维数组,并显示行、列、高的信息 c[1,...] 注:等同于c[1,:,:] 或c[1],有点像切蛋糕的感觉,切出一片二维的。 c[...,2] 注:等同于c[:,:,2]、 相对于第一轴完成多维数组迭代: for row in b: 注:有点像三位数组降维成多个一维的感觉 但是,如果要对数组中的每个元素执行操作,可以使用flat属性,该属性是数组的所有元素的迭代器: for element in b.flat: 注:这是取出多维数组中所有元素的一个不错方法 查看这部分更多更详细的用法可以看:https://docs./doc/numpy-dev/user/quickstart.html 下图部分: 对形状操作改变数组的形状 a = np.floor(10*np.random.random((3,4))) 注:通过?np.floor() 我们只到,该方法是向下取整的意思 例如: num = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) 向下取整就是指一个数字往减小的方向取到最近的值,例如上面例子的-1.7变成-2.0 所以这是产生随机整数的方法,但这里的数字是float不是int类型 可以通过各种命令改变阵列的形状。 请注意,以下三个命令都返回一个修改的新数组,不更改原始数组: a.ravel() 注:将数组改成一维 a.reshape(6,2) 注:将数组转化为指定形状 a.T 注:数组转置,和矩阵转置一样理解 a.T.shape 矩阵转置之后的形状 a.shape 注:原来矩阵的形状 至此,numpy入门完成了一半,还有两篇完结,之后咱写可视化吧,哈哈~ 未完待续~近期更新~谢谢观赏~希望对你学习有帮助~ 关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。 为大家提供与Python相关的最新技术和资讯。 |
|
来自: 夜雨江南xv2lqq > 《python》