python - numpy基础
Posted sparkingplug
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python - numpy基础相关的知识,希望对你有一定的参考价值。
一、numpy的基础操作
1、改变数组形状
(1).T 方法:转置,例如原来形状为(2,3)/(2,3,4)转置为(3,2)/(4,3,2),一维数组转置后不变。
a = np.arange(5) print(a,‘ ‘,a.T) b = np.ones((2,3)) print(b,‘ ‘,b.T) #运行结果 [0 1 2 3 4] [0 1 2 3 4] [[ 1. 1. 1.] [ 1. 1. 1.]] [[ 1. 1.] [ 1. 1.] [ 1. 1.]]
(2).reshape()方法:不改变数组元素,返回一个新的形状的数组,原数组不变
a = np.arange(10) a1 = a.reshape((2,5)) #直接改变已有的数组 print(‘a = ‘,a) #原数组不变 print(‘a1 = ‘,a1) a2 = np.ones((4,6)).reshape((3,8)) #生成数组直接改变形状 print(‘a2 = ‘,a2) a3 = np.reshape(a,(5,2)) #.reshape(a, newshape) 改变数组a的形状为newshape print(‘a3 = ‘,a3) #运行结果 a = [0 1 2 3 4 5 6 7 8 9] a1 = [[0 1 2 3 4] [5 6 7 8 9]] a2 = [[ 1. 1. 1. 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1. 1. 1. 1.]] a3 = [[0 1] [2 3] [4 5] [6 7] [8 9]]
(3).resize()方法:与.reshape()类似,但会改变原数组
a = np.arange(10) a.resize((2,5)) print(a) #改变了原来的数组a #运行结果 [[0 1 2 3 4] [5 6 7 8 9]]
a = np.arange(10) a1 = np.resize(a,(2,5)) #这样就不会改变原数组a,而生成新的数组a1 print(a) print(a1) #运行结果 [0 1 2 3 4 5 6 7 8 9] [[0 1 2 3 4] [5 6 7 8 9]]
(4).flatten()方法:对数组降维,返回一个一维数组,原数组不变
a = np.arange(9).reshape((3,3)) a1 = a.flatten() print(a) print(a1) #运行结果 [[0 1 2] [3 4 5] [6 7 8]] [0 1 2 3 4 5 6 7 8]
2、转换数组类型:new_a = a.astype(new_type)
a = np.arange(5,dtype = np.int) a1 = a.astype(np.float) print(a1,a1.dtype) print(a,a.dtype) #说明生成了一个新数组,而原数组不变 #运行结果 [0 1 2 3 4] [ 0. 1. 2. 3. 4.] float64 [0 1 2 3 4] int32
3、数组的合并分拆和堆叠
(1)数组的复制:.copy()方法,生成新数组,并完全拷贝数据,与原数组不关联
a = np.arange(5) a1 = a print(a1 is a) a1[0] = 9 #a1和a指向同一个值,同时会发生改变 print(a1,a) #运行结果 True [9 1 2 3 4] [9 1 2 3 4]
a = np.arange(5) a1 = a.copy() print(a1 is a) a1[0] = 9 #a1和a是不同的,没有相关联 print(a1,a) #运行结果 False [9 1 2 3 4] [0 1 2 3 4]
(2)数组的堆叠:.hstack()方法,水平方向堆叠数组;.vstack()方法,垂直方向堆叠数组;.stack()沿着某个轴堆叠数组。
a = np.arange(4) b = np.arange(4,8) c = np.hstack((a,b)) d = np.vstack((a,b)) e = np.stack((a,b),axis = 1) #axis是轴的参数 #a,b必须达到可以组合的形状,否则组合不了 print(a) print(b) print(c) print(d) print(e) #运行结果 [0 1 2 3] [4 5 6 7] [0 1 2 3 4 5 6 7] [[0 1 2 3] [4 5 6 7]] [[0 4] [1 5] [2 6] [3 7]]
(3)数组拆分:.hslipt()方法,将数组按列拆分;.vslipt()方法,将数组按行拆分。两种方法输出的结果都为列表。
a = np.arange(16).reshape((4,4)) b = np.hsplit(a,2) c = np.vsplit(a,2) print(a) print(b,type(b)) print(c,type(c)) #运行结果 [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [array([[ 0, 1], [ 4, 5], [ 8, 9], [12, 13]]), array([[ 2, 3], [ 6, 7], [10, 11], [14, 15]])] <class ‘list‘> [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8, 9, 10, 11], [12, 13, 14, 15]])] <class ‘list‘>
4、数组的简单运算
a = np.arange(9).reshape((3,3)) print(a) print(a + 10) #加法 print(a - 1) #减法 print(a * 2) #乘法 print(a / 2) #除法 print(a ** 2) #幂乘 #运行结果 [[0 1 2] [3 4 5] [6 7 8]] [[10 11 12] [13 14 15] [16 17 18]] [[-1 0 1] [ 2 3 4] [ 5 6 7]] [[ 0 2 4] [ 6 8 10] [12 14 16]] [[ 0. 0.5 1. ] [ 1.5 2. 2.5] [ 3. 3.5 4. ]] [[ 0 1 4] [ 9 16 25] [36 49 64]]
a = np.arange(9).reshape((3,3)) print(a) print(a.mean()) #平均值 print(a.max()) #最大值 print(a.min()) #最小值 print(a.std()) #标准差 print(a.var()) #方差 print(a.sum()) #求和 print(np.sum(a,axis = 0)) #求列的和 print(np.sum(a,axis = 1)) #求行的和 print(np.sort(np.array([1,4,3,5,8]))) #排序 #运行结果 [[0 1 2] [3 4 5] [6 7 8]] 4.0 8 0 2.58198889747 6.66666666667 36 [ 9 12 15] [ 3 12 21] [1 3 4 5 8]
二、numpy的索引和切片
1、基本的索引和切片
(1)一维数组
a = np.arange(10) print(a) print(a[1]) print(a[1:4]) #运行结果 [0 1 2 3 4 5 6 7 8 9] 1 [1 2 3]
(2)二维数组
a = np.arange(12).reshape((3,4)) print(a) print(a[1]) #第二行 print(a[1][1]) #第二行、第二列的数 print(a[1:3]) #第二到第三行 print(a[2,2]) #第三行、第三列的数 print(a[:2,1:]) #从开始到第2行,从第二列到最后 #运行结果 [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [4 5 6 7] 5 [[ 4 5 6 7] [ 8 9 10 11]] 10 [[1 2 3] [5 6 7]]
2、更改、复制索引和切片的值
(1)更改。把标量值付给索引或切片时会自动改变原数组。
a = np.arange(5) print(a) a[1] = 100 print(a) #运行结果 [0 1 2 3 4] [ 0 100 2 3 4]
(2)复制。运用.copy()方法,可以防止变动原数组
a = np.arange(5) b = a.copy() b[1] = 100 print(a) print(b) #运行结果 [0 1 2 3 4] [ 0 100 2 3 4]
3、布尔型索引和切片(后面的pandas判断矩阵就源于此)
a = np.arange(12).reshape((3,4)) i = np.array([True,False,True]) j = np.array([True,True,False,False]) print(a) print(a[i,:]) print(a[:,j]) #运行结果 [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[ 0 1 2 3] [ 8 9 10 11]] [[0 1] [4 5] [8 9]]
三、numpy的随机数
1、np.random.rand(d0,d1,d2,......),生成[0,1)之间的随机浮点数或浮点数组。
2、np.random.randn(d0,d1,d2,........),生成服从正态分布的随机浮点数或浮点数组。
3、np.random.randint(low,hight = None,size = None),生成整数或整数数组。当hight = None时,取[0,low);当hight有取值时,取[low,hight)
a = np.random.rand(2,2) b = np.random.randn(2,2) c1 = np.random.randint(4,size = (2,2)) c2 = np.random.randint(4,7,(2,2)) print(a) print(b) print(c1) print(c2) #运行结果 [[ 0.21427936 0.631128 ] [ 0.49085549 0.2944278 ]] [[ 0.53414493 -1.03783047] [-0.81749571 0.62813289]] [[2 0] [0 2]] [[6 6] [4 5]]
四、numpy数据的输入输出
1、存储读取数据(.npy文件)
import numpy as np import os a = np.random.rand(2,2) print(a) np.save(‘C:\Users\yjj\Desktop\arrayrand.npy‘, a) #保存数据 a_load = np.load(‘C:\Users\yjj\Desktop\arrayrand.npy‘) #读取数据 print(a_load) #运行结果 [[ 0.45866251 0.92471296] [ 0.84243829 0.22875525]] [[ 0.45866251 0.92471296] [ 0.84243829 0.22875525]]
2、存储读取数据(.txt文件)
与存储读取.npy文件的方法类似,只是用到的是np.savetxt()方法和np.loadtxt()方法。
以上是关于python - numpy基础的主要内容,如果未能解决你的问题,请参考以下文章