Numpy是python中非常常用的库,这里我们介绍一些numpy的常见语法。
import numpy as np #使用别名,方便
创建数组
Numpy中创建的数组类型为’‘ndarray’’,以下总结一些常见的创建Numpy数组的方法。
函数 | 说明 |
---|---|
np.zeros((shape)) | 创建一个shape形状的零数组 |
np.ones((shape)) | 创建一个shape形状的全1数组 |
np.full((shape),num) | 创建一个shape形状的值全为num的数组 |
np.eye(n) | 创建一个n * n形状的单位数组 |
np.random.random((shape)) | 创建一个shape形状的随机数组 |
np.arange(begin,end,step) | 以begin为起点,以step为步长累加,直到不超过end(且不等于end),默认step=1 |
np.linspace(begin,end,n) | 将区间[begin,end]切分为n等份 |
np.array(list|tuple) | 通过list或tuple创建numpy数组 |
数组属性
一下总结一些numpy数组的常见属性。
属性 | 说明 |
---|---|
a.dtype | 返回数组中元素的类型 |
a.size | 返回数组中元素的总个数 |
a.shape | 返回数组的形状 |
a.itemsize | 返回数组中每一个元素占用的字节数 |
a.ndim | 返回数组的维数 |
基本运算
运算 | 说明 |
---|---|
a.reshape((shape)) | 调整数组形状 |
a * b | 数组元素对应元素相乘,线性代数中的点乘 |
a.dot(b) | 矩阵相乘,线性代数中的矩阵乘法,特别注意! |
a.sum()/np.sum(a,axis) | 求数组元素之和,使用axis也可以求各个维度之和 |
a.min()/np.min(a) | 求数组最小值 |
a.max()/np.max(a) | 求数组最大值 |
a.cumsum() | 递归相加 |
a.T | 获取数组的转置矩阵 |
常用函数
下面总结一些本人经常遇到的函数和用法。
numpy中的切片
numpy中的切片可以说是最常用的语法了,下面介绍常见的几种用法。
- 花式索引
花式索引就是使用我们想要的特定索引序列对数组进行索引。
a=np.arange(0,100,10)
indices=[1,5,-1]
b=a[indices]
print(a) #[ 0 10 20 30 40 50 60 70 80 90]
print(b) #[10 50 90]
- 布尔屏蔽
a=np.linspace(0,10,10)
b=np.sin(a)
print(a) #[ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ]
print(b) #[ 0. 0.8961922 0.79522006 -0.19056796 -0.96431712 -0.66510151 0.37415123 0.99709789 0.51060568 -0.54402111]
mask=b>0 #获取到一个布尔数组
print(b[mask]) #[0.8961922 0.79522006 0.37415123 0.99709789 0.51060568]
- 缺省索引
a=np.arange(0,100,10)
b=a[:5]
c=a[a>=50]
print(b) #[ 0 10 20 30 40]
print(c) #[50 60 70 80 90]
numpy广播机制
建议参考一些博客,这里不介绍了(相对较复杂)。
对numpy中axis的理解
这个东西时间久了也会忘记,所以最好的办法就是用的时候在python终端比较一下axis=0和axis=1的区别(或者看文档例子)。
numpy数组的拼接
numpy中常用的拼接函数有一下几种:
- np.append()
- np.hstack()
- np.vstack()
np.append()
当axis=None的时候对arr和values没有形状要求,最终结果会被展平。当axis不等于None的时候,arr和values的形状要相同。(直接翻译文档了)
np.hstack()
np.hstack()进行水平的拼接。
a=np.array((1,2,3))
b=np.array((2,3,4))
print(np.hstack((a,b))) #array([1,2,3,2,3,4])
a=np.array([[1],[2],[3]])
b=np.array([[4],[5],[6]])
print(np.hstack(a,b)) #array([[1,4],[2,5],[3,6]])
np.vstack()
np.vstack()进行垂直的拼接。
a=np.array([1,2,3])
b=np.array([2,3,4])
print(np.vstack((a,b))) #array([[1,2,3],[2,3,4]])
a=np.array([[1],[2],[3]])
b=np.array([[4],[5],[6]])
print(np.vstack((a,b))) #array([[1],[2],[3],[4],[5],[6]])