NumPy基本使用

NumPy是Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
由于是底层基于c语言,因此很快。。。

numpy.array()是一个数组对象,可以用来表示一维数组、二位矩阵甚至任意维度的数据。

首先需要导入库

>>> import numpy as np

创建一个数组

>>> np.array([1,2,3,4,5])
>>> array([1, 2, 3, 4, 5])

也可以用zeros创建全零的数组,下例创建了3行2列的数组

>>> np.zeros((3,2))
>>> array([[0., 0.],
           [0., 0.],
           [0., 0.]])

可以用shape获取数组的尺寸,输出行数、列数,数组可以多维度的

>>> a = np.zeros((3,2))
>>> a.shape
>>> (3, 2)

也可以用ones创建全为1的数组

>>> np.ones((2,4))
>>> array([[1., 1., 1., 1.],
          [1., 1., 1., 1.]])

也可以用arange创建递增或者递减的数列

>>> np.arange(3,7)
>>> array([3, 4, 5, 6])

linspace(区间a,区间b,输出样本总数)会返回在某个区间,等间距分布的数字

>>> np.linspace(0,1,5)
>>> array([0.  , 0.25, 0.5 , 0.75, 1.  ])

还可以用random.rand生成随机的数组

>>> np.random.rand(2,4)
>>> array([[0.88435767, 0.54556755, 0.08636983, 0.14928895],
          [0.83287117, 0.20109339, 0.2957669 , 0.29206262]])

在NumPy中数组默认的类型是64位的浮点数

>>> a = np.zeros((4,2))
>>> a.dtype
>>> dtype('float64')

可以在创建过程中通过dtype指定数据类型,类型有
整型np.int8/16/32/64
无符号整型np.uint8/16/32/64
浮点数np.float32/64
布尔值bool
字符串str

>>> a = np.zeros((4,2), dtype = np.int32)
>>> a.dtype
>>> dtype('int32')

对于现有的数组可以通过astype转换数据类型,下例从浮点型转为整型

>>> a = np.zeros((2,4))
>>> b = a.astype(int)
>>> b
>>> array([[0, 0, 0, 0],
          [0, 0, 0, 0]])

一些数组的基本运算

两个相同尺寸的数组可以进行基本的四则运算

>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> a+b
>>> array([5, 7, 9])
>>> a/b
>>> array([0.25, 0.4 , 0.5 ])

矩阵的点乘运算

>>> np.dot(a,b)
>>> 32

矩阵的乘法运算

>>> a = np.array([[1,2],    
                 [3,4]])
>>> b = np.array([[2,0],    
                 [0,2]])
>>> a @ b
>>> array([[2, 4],
          [6, 8]])

使用sqrt求平方根,sin,cos三角函数,对数log,指数power

>>> a = np.array([1,2,3])
>>> np.sqrt(a)
>>> array([1.        , 1.41421356, 1.73205081])
>>> np.sin(a)
>>> array([0.84147098, 0.90929743, 0.14112001])
>>> np.log(a)
>>> array([0.        , 0.69314718, 1.09861229])
>>> np.power(a,2)
>>> array([1, 4, 9], dtype=int32)

也可以实现广播操作,矩阵乘以一个数

>>> a = np.array([1,2,3])
>>> a * 5
>>> array([ 5, 10, 15])

对于不同尺寸的数组也可以进行运算,在运算前NumPy会把两个数组扩展至相同的尺寸,再进行操作

>>> a = np.array([[1],
                 [10],
                 [20]])
>>> b = np.array([0,1,2])
>>> a+b
>>> array([[ 1,  2,  3],
           [10, 11, 12],
           [20, 21, 22]])

还可以用min和max返回数组中的最小值和最大值

>>> a = np.array([1,2,3,4,5])
>>> a.min()
>>> 1
>>> a.max()
>>> 5

argmin返回最小元素所在的索引,argmax返回最大元素所在的索引,sum返回数组总和,mean返回数据的平均值,median返回数据的中位数,var返回数据的方差,std返回数据的标准差

>>> a.argmin()
>>> 0
>>> a.argmax()
>>> 4
>>> a.sum()
>>> 15
>>> a.mean()
>>> 3.0
>>> np.median(a)
>>> 3.0
>>> a.var()
>>> 2.0
>>> a.std()
>>> 1.4142135623730951

对于多维的数组,还可以加入一个参数axis,当axis=0时表示行(每一行相加),axis=1时表示列(每一列相加)

>>> a = np.array([[1,2,3,4,5],
                  [5,6,7,8,9]])
>>> a.sum(axis = 0)
>>> array([ 6,  8, 10, 12, 14])
>>> a.sum(axis = 1)
>>> array([15, 35])

可以获取数组中指定位置的元素

>>> a = np.array([[1,2,3],
                  [4,5,6]])
>>> a[0,1]
>>> 2

按照条件帅选出符合条件的元素,返回所以小于3的元素

>>> a[a < 3]
>>> array([1, 2])

切片,0:2代表可以取[0,2)这个区间

>>> a[0, 0:2]
>>> array([1, 2])

后面再加一个冒号可以代表步长,负数代表从右往左

>>> a = np.array([1,2,3,4,5,6,7,8,9])
>>> a[0:9:2]
>>> array([1, 3, 5, 7, 9])
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容