最近看了一些numpy的基础,在这里整理一下。

创建:

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np

#数组
array1 = np.array([[1,2,3],[4,5,6]])
np.eye(3)#单位多维数组
np.diag([1,2,3,4])#对角多维数组
np.arange(1,4)#[1,2,3]数组

#矩阵
np.mat("1 2 3;4 5 6;7 8 9")#矩阵运算与多维数组运算结果不同,所以要用mat建矩阵,用分号隔开数据
matrix = np.mat(array1)#可以用多维数组初始化矩阵
matrix1 = np.bmat("array1 array2;array1 array2")#创建分块矩阵

随机数:

1
2
3
4
np.random.random(100)#完全随机
np.random.rand(5,5)#5*5均匀分布
np.random.randn(5,5)#5*5正态分布
np.random.randint(2,50,size=(2,3),dtype='l')#大于等于2小于50的2*3的int64型整数

变换数组形态:

1
2
3
arr.reshape(3,3)#转变成3*3的数组,但要求原数组必须9个元素,否则不能reshape
np.hstack((arr1,arr2))#横向组合
np.vsplit(arr4,3)#横向切割,即把横向由1列的变成3列(相当于横着切)

文件存储与读取

1
2
3
4
5
6
7
8
9
10
#二进制存储与读取
#存储
file = "./temp/save_arr.npy"
filez = "./temp/save_arr.npz"
np.save(file,arr)#用save存,文件扩展名.npy,只能存一个数组
np.savez(filez,arr1[,arr2...])#用savez存,文件扩展名.npz,可以存多个数组。注意:不按照要求扩展名,则系统自己添加对应扩展名;二进制存储的数组打开文件看不到真实数据
#读取
loaded_data = np.load(file)#存储可以省略扩展名,读取一定不可以
loaded_dataz = np.load(filez)
loaded_dataz["arr_0"]#对于多个文件读取,这种方式可以得到单独数组
1
2
3
4
5
#文件存储与读取
#存储
np.savetxt(fname,x,fmt='%d',delimiter=',',newline='\n',header='',footer='',comments='# ')#x为要存的数组,fmt='%d'表示整数方式存,delimiter表示存储时的分隔符,存储和读取时默认为空格
#读取
loaded_data = np.loadtxt(fname,delimiter=",")#一定也要带上啊delimiter且与文件中的分隔符一致

利用numpy做简单的统计分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
np.random.seed(10)#种子是伪随机数的开头,相同种子对应随机数都相同,一般种子会设为当前时间,确保得到真随机数(numpy默认也是这样)
arr = np.random.randint(1,10,size=10)
#排序
arr.sort()#这个会直接将arr排序
arr.sort(axis=0)#二维数组的sort参数axis可以为0、1,分别对应数组纵向和横向的排序
#去重
np.unique(arr)
#重复
np.tile(arr,3)#arr是重复哪个,3是重复次数
np.repeat(arr,3,axis=0)#axis是重复的方向(tile没有这个参数)
#注意:tile是对数组进行重复,repeat则是对每一个数组的每一个元素进行重复,打破了原来的数组。
#常用统计函数
np.sum(arr)#求和
arr.sum(axis=0)#沿纵轴求和
np.mean(arr)#计算数组均值
arr.mean(axis = 0)#沿着纵轴计算数组均值
np.std(arr)#计算标准差
np.var(arr)#计算方差
np.min(arr)#计算最小值
np.max(arr)#计算最大值