numpy是开源数值计算拓展,用于储存和处理大型矩阵。
一、导入numpy
import numpy as np
二、产生数组
举例 数组相加
a=np.array([1,2,3,4])
b=np.array([2,3,4,5])
print(a*2) #[2 4 6 8]
print(a+b) #[3 5 7 9]
1. 列表生成数组
lst=[0,1,2,3]
a=np.array(lst)
或
a=np.array([1,2,3,4])
2. 生成全0或全1数组
#默认浮点数
np.zeros(5)
np.ones(5)
#dtype指定数据类型
np.ones(5,dtype='int')
np.ones(5,dtype="bool") #[true,true,true,true,true]
a=np.array([1,2,3,4])
a.fill(5) #[5,5,5,5]
dtype数据类型必须统一
数据类型转换
a=a.astype('float')
3. 生成整数序列
a=np.arange(1,10,2) #[1 3 5 7 9]
4. 生成等差数列
#np.linspace(start,stop,num)
a=np.linspace(1,10,11) #[ 1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1 10. ]
5. 生成随机数组
a=np.random.rand(5) #[0.02962757 0.51867239 0.64026669 0.42642813 0.77117995]
#np.random.randn(num) 符合标准正态分布的随机数
a=np.random.randn(5) #[ 0.68557635 -0.656888 -2.131275 0.29222199 2.14085795]
#np.random.randint(start,stop,num) 随机整数
a=np.random.randint(1,10,5) #[3 1 4 3 5]
三、数组属性
#数组属性
print(type(a)) #<class 'numpy.ndarray'>
#数组值的属性
print(a.dtype) #int32
#数组维度
print(a.ndim) #1 一维数组
#数组维度值
print(a.shape)
print(np.shape(a)) #(5,) 第一维度中有五个元素
#数组中元素数目
print(a.size) #5
四、索引和切片(同python)
a=np.array([1,2,3,4])
print(a[0])
a=np.random.randint(1,10,5)
print(a)
print(a[:2])
print(a[-4:3])
###
# [3 8 7 8 4]
# [3 8]
# [8 7]
五、多维数组(同一维数组)
a=np.array([[1,2],[3,4]])
print(a)
###
#[[1 2]
# [3 4]]
print(a.shape) #(2, 2)
print(a.size) #4
print(a.ndim) #2
1. 索引和切片
print(a[1,1]) #4
print(a[0]) #[1 2]
print(a[:,1]) #[2 4]->第二列
print()
a=np.array([[1,2,3],[3,4,5]])
print(a[1,::2]) #3 5]->第二行的奇数列
切片使用引用机制,即会改变原数值。列表中不使用该机制。可使用copy()申请新的内存空间。
2. 花式索引
花式索引返回的对象是复制。
a=np.arange(0,100,10) #创建等差数列
#index数组指定索引位置
index=[1,2,-3]
y=a[index]
print(y) #[10 20 70]
#使用布尔数组指定索引
b=np.array([0,2,0,3,1,4,3,1,0,0],dtype=bool)
print(b) #[False True False True True True True True False False]
print(a[b]) #[10 30 40 50 60 70]
a=np.array([[0,1,2],[3,4,5],[6,7,8]])
print(a[(0,1,2),(1,2,0)]) #[1 5 6]
print(a[2:,[0,2]]) #[[6 8]]
六、where语句
返回所有非零元素的索引
#判断数组元素是否大于1
a=np.array([1,3,2,0,1])
print(np.where(a>1))
#(array([1, 2], dtype=int64),)
#返回元组中大于1的数
#a>1返回一个布尔类型数组
print(a>1) #[False True True False False]
print(a[a>1])
print(a[np.where(a>1)]) #[3 2]
七、类型转换
1. dtype
2. asarray
a=np.array([1,2,3])
a=np.asarray(a,dtype=float)
print(a) #[1. 2. 3.]
3. astype 返回新的数组
八、数组排序
#数组排序,不影响原数组
a=np.array([1,2,1,2,1])
print(np.sort(a)) #[1 1 1 2 2]
#返回从小到大数组排序后的索引
order=np.argsort(a)
print(order) #[0 2 4 1 3]
九、常用计算函数
求和 np.sum()
最大值 np.max()
最小值 np.min()
均值 np.mean()
标准差 np.std()
相关系数矩阵 np.cov()
十、多维数组操作
1. 生成随机多维数组
#3×3×3数组
print(np.random.random((3,3,3)))
2. 更改数组形状
#改变原数组形状
a=np.array([1,2,1,2,1,3])
a.shape=2,3
print(a)
'''
[[1 2 1]
[2 1 3]]
'''
#不改变原数组形状
a.reshape(1,6)
print(a)
'''
[[1 2 1]
[2 1 3]]
'''
3. 数组转置
print(a)
'''
[[1 2 1]
[2 1 3]]
'''
print(a.T)
'''
[[1 2]
[2 1]
[1 3]]
'''
print(a.transpose())
'''
[[1 2]
[2 1]
[1 3]]
'''
4. 数组连接
x=np.array([[0,1],[2,3]])
y=np.array([[4,5],[6,7]])
print(x.shape) #(2, 2)
print(y.shape) #(2, 2)
#默认沿着第一维连接
z=np.concatenate((x,y))
print(z)
'''
[[0 1]
[2 3]
[4 5]
[6 7]]
'''
#axis默认为0,按列连接
z=np.concatenate((x,y),axis=1)
print(z)
'''
[[0 1 4 5]
[2 3 6 7]]
#连接成三维数组
z=np.array((x,y))
print(z)
'''
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
'''
#纵向
print(np.vstack((x,y)))
'''
[[0 1]
[2 3]
[4 5]
[6 7]]
'''
#横向
print(np.hstack((x,y)))
'''
[[0 1 4 5]
[2 3 6 7]]
#深度
print(np.dstack((x,y)))
'''
[[[0 4]
[1 5]]
[[2 6]
[3 7]]]
'''