Numpy的概念
是python中一种高性能的数据分析的基础包,主要是提供数组对象,专门用来做数组的运算,是一个多维的数组对象(ndarray)
关于安装
装完anaconda以后,默认会安装Numpy,如果没有的话,直接用pip.install.Numpy
Ndarray
import numpy as np ar = np.array([1,2,3,4,5]) print(ar) print([1,2,3,4,5]) print(ar.ndim) print(ar.shape) print(ar.size) print(ar.dtype) print(ar.itemsize)
创建数组: array()函数,列表,元组,数组,生成器,序列
arr1 = np.array(range(10)) arr2 = np.array([1,2,3,4,5.5]) arr3 = np.array([[1,2,3,4],[5,6,7,8]]) print(arr3) print(arr3.ndim) print(arr3.shape)
arange() ,类似于python range()
np.arange(10) np.arange(10.) np.arange(1,10,0.1) np.arange(10000)
linspace(): 返回在间隔[开始,停止]上 num个均匀间隔的样本
np.linspace(2.0,3.0, num=5) np.linspace(2.0, 3.0, num=5, endpoint=False) np.linspace(2.0,3.0, num=5, retstep=True)
zeros()/zeros_like()/ones()/ones_like()
numpy.zeros(shape, dtype=float, order='C'):返回给定形状和类型的新数组,用零填充。
np.zeros(5) np.zeros((2,3,2), dtype=np.int) arr1 = np.array([[1,2,3],[4,5,6]]) np.zeros_like(arr1) np.ones(6)
# eye()
# 正方形的N*N的单位矩阵,对角线为1,其余为0
np.eye(5)
numpy 通用函数
基本操作
# 数组形状 .T/.reshape()/.resize()
# 转置 (2, 5) -> (5, 2)
arr1 = np.arange(10) arr2 = np.ones((5,2)) arr3 = np.array([[1,2,3],[4,5,6]]) print(arr1,arr1.T) print('_______') print(arr2) print(arr2.T) print('______') print(arr3) print(arr3.T)
arr2.reshape((10,))
# reshape只提供形状的改变,元素数量保持一致
arr4 = np.resize(arr2, (3,5))
print(np.arange(1,13).reshape(3,4))
np.resize(np.arange(1,13).reshape(3,4), (3,5))
# reshape只提供形状的改变,元素数量保持一致
arr4 = np.resize(arr2, (3,5))
print(np.arange(1,13).reshape(3,4))
np.resize(np.arange(1,13).reshape(3,4), (3,5))
# np.resize 改变形状,如果元素不够,重复填充
# 数组的复制
arr1 = np.arange(10) arr2 = arr1 arr1 is arr2 arr3 = arr1.copy() arr1 is arr3 # copy 复制一个副本 # .T, reshape,resize 返回一个新的数组
# 数组类型转换 .astype() 默认返回一个新的数组 ar1 = np.arange(10, dtype=np.float) ar1.astype(np.int32)
# 数组的堆叠 a1 = np.arange(5) a2 = np.arange(4) # print(a1.shape, a2.shape) # 水平堆叠 np.hstack((a1, a2)) # 水平堆叠时,行数要一致 ar1 = np.arange(12).reshape((3,4)) ar2 = np.arange(15).reshape((3,5)) np.hstack((ar1, ar2)) # 垂直堆叠 # np.vstack() # 垂直堆叠,列数要一致 # np.stack() 通过指定哪个维度,哪个轴 # help(np.stack) ar1 = np.arange(12).reshape((3,4)) ar2 = np.ones((3,4)) print(ar1) print(ar2) np.stack((ar1,ar2),axis=0).ndim
# 数组的拆分 ar = np.arange(16).reshape(4,4) print(ar) # 水平拆分 按列拆 ars = np.hsplit(ar,2) #print(ars) #print(ars[0]) #print(ars[1]) # 垂直拆分,按行拆 ars = np.vsplit(ar,4) print(ars) print(ars[0]) print(ars[1])
# 简单的运算 # 矢量化 ar = np.arange(12).reshape(3,4) # 与标量的运算 # print(ar) # print(ar+1) # print(ar*2) # print(1/(ar+1)) # print(ar**0.5) # 常用的统计函数 print(ar.mean()) # 求平均值 print(ar.max()) # 求最大值 print(ar.min()) # 求最小值 print(ar.std()) # 求标准差 print(ar.var()) # 求方差 # 可以在不同维度上进行操作 print(ar) np.sum(ar, axis=0) np.sum(ar, axis=1) np.sort(np.array([4,3,2,1]))
numpy 索引和切片
# 基本索引 ar = np.arange(20) # print(ar) # print(ar[4]) # print(ar[:3]) # 一维的 ar = np.arange(16).reshape(4,4) print(ar) # print(ar[0]) # 切出一行 切片为下一个维度的一个元素 # print(ar[0][-1]) # 二次索引,得到一维中的一个值 print(ar[:3]) # 切出多行, print(ar[1,1]) # 类似于二次索引 print(ar[:2, 1:]) # 二维的
# 布尔型索引 ar = np.arange(12).reshape(3,4) i = np.array([True, False, True]) j = np.array([False, True, False, True]) # print(ar) # print(i) # print(j) # print(ar[i]) # print(ar[i,:]) # 选行 # print(ar[:, j]) # 选列 # 基本的布尔型索引 ai = ar > 5 print(ar) print(ai) print(ar[ar % 2 != 0]) # 选取所有的奇数 print(ar[i,j])
numpy 随机数
numpy.random
# 生成 samples = np.random.normal(size=(4,4)) # 符合标准正态分布的4*4样本值 print(samples)
# numpy.random.rand() : [0, 1) 之间的随机样本或N维浮点数组 ---均匀分布 import matplotlib.pyplot as plt a = np.random.rand() b = np.random.rand(4) c = np.random.rand(3,4) s1 = np.random.rand(1000) s2 = np.random.rand(1000) plt.scatter(s1, s2) plt.show()
# numpy.random.randn() :生成一个浮点数或者N维的浮点数组---正态分布
s1 = np.random.randn(1000)
s2 = np.random.randn(1000)
plt.scatter(s1, s2)
plt.show()
# numpy.random.randint(low, high=None, size=None, dtype='l'): 生成一个整数或者N维的整数数组 # 若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low # dtype参数:只能是int类型 np.random.randint(2) np.random.randint(2, 6, size=5) np.random.randint(1,100, size=[3,5])
numpy的输入输出
读写数组数据,文本数据
# 二进制文件 # 存数据 import numpy as np ar = np.random.rand(5,5) np.save('test.npy',ar)
np.load('test.npy')
# 文本数据 # 存 np.savetxt('test.txt', ar, delimiter=',')
# 读取 np.loadtxt('test.txt', delimiter=',')