Numpy是一个开源的Python科学计算库,它是python科学计算库的基础库,许多其他著名的科学计算库如Pandas,Scikit-learn等都要用到Numpy库的一些功能。
Numpy数组通常是由相同种类的元素组成的,即数组中的数据项的类型一致。这样有一个好处,由于知道数组元素的类型相同,所以能快速确定存储数据所需空间的大小。Numpy数组能够运用向量化运算来处理整个数组,速度较快;而Python的列表则通常需要借助循环语句遍历列表,运行效率相对来说要差。Numpy使用了优化过的C API,运算速度较快
#coding=gbk
#numpy数组的大小是固定的
import numpy as np #导入包
from matplotlib.pyplot import axis
a=np.array([1,2,3])
print(a) #输出:[1 2 3]
print('分割线------')
#array()参数可以是单层或多层列表
b=np.array([[1.2,3.4],[2.6,4.5]])
print(b) #shuhcu :[[1.2 3.4]
# [2.6 4.5]]
print(b.ndim) #2,表示数组的维度
print(b.size) # 4,表示数据的个数
print(b.shape) # (2, 2)
#array()参数可以是单层或多层元组,结果与参数是列表是一样的
c=np.array(((1,2,3),(4,5,6)))
print(c)
# #输出:
# [[1 2 3]
# [4 5 6]]
numpy数据类型:
#numpy数据类型
#使用dtype定义数据类型
f=np.array([[1,2],[3,4]],dtype=complex)
print(f)
# [[1.+0.j 2.+0.j] 输出类型为复数形式
# [3.+0.j 4.+0.j]]
#创建数组的函数
g=np.zeros((3,3)) #创建3行3列的数组
print(np.ones((3,3)))
print(np.arange(0,12).reshape(3,4))
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(np.linspace(1,15,5))
#[ 1. 4.5 8. 11.5 15. ] 将其分成5份
print(np.random.random((3,3)))
# [[0.68333882 0.64261184 0.31273476] 生成3行3列的随机数
# [0.34138222 0.62380152 0.24387784]
# [0.70731665 0.5085779 0.26858421]]
#基本运算
A=np.arange(0,9).reshape((3,3))
B=np.arange(10,19).reshape((3,3))
print(A+B)
# [[10 12 14] numpy中的数组运算都是元素级,即将一个数组看做一个整体
# [16 18 20]
# [22 24 26]]
print(A*B)
# [[ 0 11 24]
# [ 39 56 75]
# [ 96 119 144]]
#矩阵乘积
print(np.dot(A,B))
# [[ 45 48 51]
# [162 174 186]
# [279 300 321]] 表示A矩阵和B矩阵相乘
#自减自加
A+=1
B-=1
print(A)
# [[1 2 3] A全部元素自加 1
# [4 5 6]
# [7 8 9]]
print(B)
#聚合函数:对一个数组计算,返回一个单一值得函数
print(np.mean(B)) #得到一个平均值
print(np.median(B))
print(np.var(B)) #得到方差 6.666666666666667
print(np.sqrt(np.var(B)))
print(np.std(B)) #得到标准方差 2.581988897471611
#索引
print(A[1,2]) #形式如: A[ ] ,查找第2行第3列的数据
#切片
print(A[0,:]) #抽取第一行 [1 2 3]
print(A[:,0])
print(A[0:2,0:2])#抽取 前2行前2列
#数组迭代
for items in A.flat:
print(items) #遍历A数组中每个元素
a1=np.apply_along_axis(np.mean, axis=1, arr=A)
print(a1) #[2. 5. 8.] , axis=1 求得每行的平均数 ,axis=0时,求得每列的平均数
def add(x):
return x+12
a2=np.apply_along_axis(add, axis=1, arr=A)
print(a2)
#布尔操作
print(A>5)
# [[False False False] 获得bool形式的数组
# [False False True]
# [ True True True]]
print(A[A>5]) #获得大于5的新的数组 [6 7 8 9]
A1=np.array(np.random.random((3,4)))
print(A1)
print(A1.ravel()) #使数组转换成一维数组
print(A1.transpose()) #交换行列的顺序
#数组操作
#1数组连接
c=np.ones((3,3))
b=np.zeros((3,3))
print(np.vstack((c,b))) #垂直入栈操作,即在c的下面增加
# [[1. 1. 1.]
# [1. 1. 1.]
# [1. 1. 1.]
# [0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
print(np.hstack((c,b))) #水平入栈,在右边入栈
# [[1. 1. 1. 0. 0. 0.]
# [1. 1. 1. 0. 0. 0.]
# [1. 1. 1. 0. 0. 0.]]
#2数组切分
b1=np.arange(16).reshape(4,4)
print(b1)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
[b2,b3]=np.hsplit(b1,2) #水平切分,按照数组的宽度切分
print(b2)
# [[ 0 1]
# [ 4 5]
# [ 8 9]
# [12 13]]
[b7,b8]=np.vsplit(b1,2) #垂直切分,按照数组的高度切分
print(b7)
# [[0 1 2 3]
# [4 5 6 7]]
[b4,b5,b6]=np.split(b1,[1,3],axis=1) #将b1数组分为3组
print(b4)
# [[ 0] 输出最后一列
# [ 4]
# [ 8]
# [12]]
#广播机制
f1=np.arange(4)
f2=np.arange(16).reshape(4,4)
print(f1+f2)
# [[ 0 2 4 6]
# [ 4 6 8 10]
# [ 8 10 12 14]
# [12 14 16 18]]
参考《Python数据分析实战》