numpy 使用入门
本文为 落魄陶陶 原创,转载请注明出处
产生数组
从列表产生数组
l=[1,2,4]
a =np.array(l)
从列表传入
a = np.array([1,2,3])
生成全0数组
np.zeros(5)
生成全1的数组
np.ones(5,dtype=int)
使用fill填充
a = np.array([1,2,4,5])
a.fill(5) # 会自动根据a的dtype进行类型转换
数组中要求所有元素的dtype是一样的
a = a.astype(float)
a.fill(2.5)
## 特定方法生成数组
## 生成整数序列
```python
a = np.arange(1,10) #1-9
a = np.arange(1,10,2)
生成等差数列
a = np.linspace(1,10,10) # 1-10 10个数
生成随机数
a = np.random.rand(10) # 0-1之间
a = np.random.randn(10) # 标准正态分布
a = np.random.randint(1,10,10) # 1-10之间10个整数
数组属性
type(a)
查看数据类型
a.dtype
查看形状
a.shape
查看个数
a.size
查看维度
a.ndim
索引和切片
索引,修改第一个元素
a = np.array([0,1,2,3])
a[0]
a[0]=5
切片,支持负索引
a[1:3] # 左闭右开
a[1:-2] # 左闭右开,从1到倒数第三
a[-4.3]
省略参数
a[-2:]
a[::2]
多维数组及其属性
生成多维数组
a = np.array([[1,2,3],[4,5,6]]
查看形状
a.shape
查看长度
a.size
查看维度
a.ndim
多维数组索引
a[1,2]
索引整行
a[1]
索引整列
a[:,1]
多维数组切片
第一行第四第五两个元素
a[1,[3:5]]
最后两行的最后两列
a[4:,4:]
第三列
a[:,2]
## 第三,第五行奇数列
```python
a[2::2,1::2]
切片是引用
切片内容改变,引用值也改变
使用copy()产生副本
b = a[2:4].copy()
# 花式索引
```python
a = np,arange(0,100,10)
一维花式索引
index = [1,2,-3]
y = a[index]
mask=np.array([0,2,2,2,2,11,1,0,0],dtype=bool)
a[mask]
二维花式索引
a = np.array([range(10),range(10,20),range(20,30)])
对角线五个
a[(0,1,2,3,4),(1,2,3,4,5)]
最后三行1,3,5列
a[3:,[0,2,4]]
mask索引
mask = np.array([1,0,1,0,0,1],dtype=bool)
a[mask,2]
花式索引返回的是副本,不是引用
不完全索引
只给定行索引,返回整行
y=a[:3]
con = np.array([0,1,1,0,1,0],dtype=bool)
a[con]
where语句
一维数组
a = np.array([0,10,24,15])
a>10 # 返回bool array
np.where(a>0) # 返回数组大于10的索引位置
a[a>10] # 返回>10的值
a[np.where(a>10)]
数组类型
类型转换
a = np.array([1.5,-3],dtype=float)
asarray
a = np.array([1,2,4])
np.asarray(a,dtype=float)
astype
a = np.arange([1,2,3])
a.astype() # 返回新的数组
数组排序
np.sort(a) # 返回新的数组
np.argsort(a) # 返回从小到大的排列在数组中的索引位置
np.sum(a)
a.sum()
np.max(a)
a.max()
np.min(a)
a.min()
np.mean(a)
a.mean()
np.std(a) # 标准差
a.std()
相关系数矩阵 TODO
多维数组操作
数组形状
a = np.arange(6)
a.shape=2,3 # 改变原来结构
a.reshape(2,3) # 返回新的数组
转置
a.T
a.transpose()
数组连接
concatenate((a0,a1,...),axis=0) #
vstack()
hstack()
dstack()