第二章NumPy数值计算基础

第二章 NumPy数值计算基础

2.1掌握Numpy数组对象ndarray

2.1.1创建数组对象

2.数组创建

#创建数组并查看数组属性
import numpy as np
arr1=np.array([1,2,3,4])
print(arr1)
arr2=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(arr2)
print(arr2.shape)
print(arr2.dtype)
print(arr2.size)
#重新设置数组的shape属性
arr2.shape=4,3
print(arr2)
#使用arange函数创建数组
np.arange(0,1,0.2)#通过指定起点和终点,步长来创建一维数组
#linspace创建一维数组
np.linspace(0,1,12)#通过指定起点、终点和元素个数来创建一维数组
#logspace函数与linspace类似,它创建的是等比数列
np.logspace(0,1,12)
np.zeros((2,3))#元素值均为0
np.eye(3)#主对角线元素均为1,其他元素均为0
np.diag((1,2,3,4))#除对角线以外的元素均为0,对角线元素可以是1或者其他值
np.ones((2,3))#元素值均为1
#数组类型转换
np.float64(43)
np.int8(23.0)
np.bool(0)
np.float(False)

2.1.2生成随机数

#random函数是最常见的生成随机数的方法
np.random.random(10)
#rand可以生成服从均匀分布的随机数
np.random.rand(2,3)
#randn函数可以生成服从正态分布的随机数
np.random.randn(10,5)
#randint函数可以生成给定上下限范围的随机数
np.random.randint(2,10,size=[2,3])

2.1.3 通过索引访问一维数据

1.一维数组的索引

arr=np.arange(10)
print(arr)
arr[6]
arr[1:5]#包括arr[1],不包括arr[5]
rr[:5]#从arr[0]开始
arr[3:4]=101
arr[1:-1:2]#2表示隔一个元素取一个元素
arr[-1:1:-2]#步长为负数时,开始下标必须大于结束下标

2.多维数组的索引

arr=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
arr[1,2:4]#返回第1行中第2和第3个元素
#从两个序列中的对应位置取出两个整数来组成下标
arr[[(0,1),(2,3)]]
arr[1:,(1,2,3)]

2.1.4改变数组形态

#改变数组形状
arr=np.arange(12)
arr.shape
arr.reshape(3,4)
#查看数组维度
arr.reshape(3,4).ndim
#使用ravel函数展平数组
arr.ravel()
#使用flatten函数展平数组
arr=np.arange(16).reshape(2,8)
arr.flatten()#横向展平
arr.flatten('F')#纵向展平
#使用hstack函数实现数组横向组合
arr=np.arange(12).reshape(3,4)
arr2=arr*3
np.hstack((arr,arr2))
#使用vstack函数实现数组纵向组合
np.vstack((arr,arr2))
#使用concatenate函数组合数组
np.concatenate((arr,arr2),axis=1)
np.concatenate((arr,arr2),axis=0)
#使用hsplit实现数组横向分割
arr=np.arange(12).reshape(3,4)
np.hsplit(arr,2)
#使用vsplit函数对数组实现纵向切割
np.vsplit(arr,3)
#使用split可以实现数组分割,axis=1时可以进行横向切割,axis=0时进行纵向切割
np.split(arr,2,axis=1)

2.2 掌握Numpy矩阵与通用函数

2.2.1创建NumPy矩阵

#使用max和matrix函数创建矩阵
import numpy as np
matrl=np.mat("1 2 3;4 5 6;7 8 9")
matr2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
#使用bmat函数创建矩阵
arr1=np.eye(3)
arr2=arr1*3
np.bmat("arr1 arr2;arr1 arr2")
#矩阵运算
arr1+arr2
arr1-arr2
arr1*arr2
np.multiply(arr1,arr2)#矩阵对应元素相乘结果
#查看矩阵属性
arr1.T#转置
arr.H#共轭转置
arr.I#逆矩阵
arr.A#返回二维矩阵视图

2.2.2掌握ufunc函数

1.常用的ufunc函数运算

#数组的四则运算
x=np.array([1,2,3])
y=np.array([4,5,6])
print(x+y)
x-y
x*y
x/y
x**y#数组幂运算
#数组的比较运算
x<y
np.all(x==y)
np.any(x==y)

2.ufunc函数的广播机制

#一维函数的广播机制
arr1=np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
arr2=np.array([1,2,3])
arr1+arr2
#二维数组的广播机制
arr2=np.array([1,2,3,4]).reshape((4,1))
arr1+arr2

2.3 利用NumPy进行统计分析

2.3.1读/写文件

#二进制数据存储
import numpy as np
arr=np.arange(100).reshape(10,10)#创建一个数组
np.save("./Python数据分析与应用/save_arr",arr)
import numpy as np
#多个数组存储
arr1=np.array([[1,2,3],[4,5,6]])
arr2=np.arange(0,1,0.1)
np.savez('./tmp/save_arr',arr1,arr2)
#二进制文件读取
#读取含有单个数组的文件
loaded_data=np.load("./tmp/save_arr.npy")
#读取含有多个数组的文件
loaded_data=np.load("./tmp/save_arr.npz")
loaded_data['arr_0']
loaded_data['arr_1']
#文件存储与读取
arr=np.arange(0,12,0.5).reshape(4,-1)
arr
# fmt="%d"表示保存为整数
np.savetxt("./tmp/arr.txt",arr,fmt="%d",delimiter=",")
#读入的时候也需要指定逗号分割
loaded_data=np.loadtxt("./tmp/arr.txt",delimiter=",")
print(loaded_data)
#使用genfromtxt函数读取数组
load_data=np.genfromtxt("./tmp/arr.txt",delimiter=",")
print(load_data)

2.3.2使用函数进行简单的统计分析

1、排序

#使用sort函数进行排序
np.random.seed(42)#设置随机种子
arr=np.random.randint(1,10,size=10)
print(arr)
arr.sort()#直接排序
arr=np.random.randint(1,10,size=(3,3))#生成三行三列的随机数组
arr.sort(axis=1)#沿着横轴排序
arr.sort(axis=0)#沿着纵轴排序


#使用argsort函数进行排序
arr=np.array([2,3,6,8,0,7])
print(arr)
#使用lexsort函数进行排序
a=np.array([3,2,6,4,5])
b=np.array([50,30,40,20,10])
c=np.array([400,300,600,100,200])
d=np.lexsort((a,b,c))
print(list(zip(a[d],b[d],c[d])))

2、去重与重复数据

#数组内数据去重
names=np.array(['小明','小黄','小花','小兰','小明'])
print(names)
print(np.unique(names))
ints=np.array([1,2,3,4,4,5,6,6,7,8,8,9,10])#创建数值型数据
print(ints)
print(np.unique(ints))
#使用tile函数实现数据重复
arr=np.arange(5)
print(arr)
print(np.tile(arr,3))#参数代表重复的次数
#使用repeat函数实现数据重复
np.random.seed(42)
arr=np.random.randint(0,10,size=(3,3))
print(arr)
arr.repeat(2,axis=0)#2代表重复次数,按行进行元素重复
arr.repeat(2,axis=1)#按列进行元素重复

3、常用的统计函数

# NumPy中常用统计函数的使用
arr=np.arange(20).reshape(4,5)
print(arr)
#计算数组的和
np.sum(arr)
arr.sum(axis=0)#沿着纵轴求和
arr.sum(axis=1)#沿着横轴求和
np.mean(arr)
arr.mean(axis=0)
#计算数组标准差
np.std(arr)
#计算数组方差
np.var(arr)
#计算数组最小值
np.min(arr)
#返回数组最小元素的索引
np.argmin(arr)
#返回数组最大元素的索引
np.argmax(arr)
#cumsum和cumprod函数的使用
arr=np.arange(2,10)
print(arr)
np.cumsum(arr)#计算所有元素的累计和
np.cumprod(arr)#计算所有元素的累计积

2.3.3任务实现

任务:读取iris数据集中花萼长度数据,并对其进行统计分析

#读取文件
iris_sepal_length=np.loadtxt("C:/Users/ljy15/Python数据分析与应用/Python数据分析与应用数据/第2章/任务程序/data/iris_sepal_length.csv",delimiter=",")
print(iris_sepal_length)
iris_sepal_length.sort()#排序
import numpy as np
print(np.unique(iris_sepal_length))#去除重复值
np.sum(iris_sepal_length)
np.cumsum(iris_sepal_length)
np.mean(iris_sepal_length)
np.std(iris_sepal_length)
np.var(iris_sepal_length)
np.min(iris_sepal_length)
np.max(iris_sepal_length)

实训

1、创建数组并进行运算

#创建一个数值范围为0~1,间隔为0.01的数组
arr=np.arange(0,1,0.01)
#创建100个服从正态分布的随机数
arr1=np.random.randn(10,10)
arr1
arr2=np.arange(10)
print(arr2)
arr3=np.arange(1,20,2)
print(arr3)
arr2+arr3
arr2-arr3
arr2*arr3
arr2/arr3
np.sum(arr2)
np.mean(arr2)
np.std(arr2)
np.var(arr2)
arr2.sum(axis=0)
arr2.mean(axis=0)
np.min(arr2)
np.max(arr2)
np.argmin(arr2)
np.argmax(arr2)
np.cumsum(arr2)
np.cumprod(arr2)

2、创建一个国际象棋的棋盘

arr1=np.zeros((8,8))
arr1
arr1[(0,2,4,6),0:]=1
arr1[0:,(1,3,5)]=1
上一篇:javascript实现洗牌算法


下一篇:多种方式实现strcpy