一、数组的创建
1.使用之前先导入包
import numpy as np
2.创建一维数组
a = np.array([1, 2, 3])
print(type(a))
print(a)
3.创建多维数组
# 创建多维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b.ndim) # 数组的秩
print(b.shape) # 数组的形状
print(b.dtype) # 数据类型
4.创建全0数组
# 创建全零数组
c = np.zeros(10)
print(c)
5.创建全1数组
# 创建全1数组
d = np.ones((2, 5))
print(d)
print(d.dtype)
6.创建自然数数组
e = np.arange(10)
print(e)
7.自然数三维数组,可以采用reshape方法改变数组的维度
e = np.arange(24).reshape(2, 3, 4) # 三维数组
print(e)
8.从0到10均匀产生100个数字
# 从0到10之间均匀产生100个数字
e = np.linspace(0, 10, 100)
print(e)
# 可用于绘制X,Y轴图像
二、数据类型与转换
1.改变数组的类型使用dtype
# 改变数组的类型“dtype”
a = np.array([1, 2, 3], dtype=np.float32)
print(a)
numpy 常见的数据类型 int_ int16 int32 int64 uint8:0-255 unit16 32 64 float_ float16 float32 float64 complex 复数类型 bool_ True Flase
2.bool型数组
# bool型数组
a = np.array([True, False, False, True])
print(a.dtype)
print(a)
3.字符串类型
# 字符串类型
a = np.array(['sd', 'sde'])
print(a.dtype) # dtype=<U3,表示字符串长度小于3
print(a)
4.数据类型的转换
如果是浮点数类型转化成整数类型,直接将小数点后边去掉,而不是四舍五入
# 数据类型的转换
a = np.array([True, False, False, True]) # bool类型转换整形
a = a.astype(np.int16)
print(a)
三、数组的切片和索引
1.对一维数组进行切片
# numpy 数组的切片
# 对一维数组进行切片
a = np.arange(10)
b = a[5:8]
print(b)
2.设置步长
# 设置步长,隔两个取一个
b = a[2:8:2]
print(b)
3.对数组进行切片之后,改变其切片的值会改变原有数组的值
# 数据切片为了方便对大量数据进行处理,所以对切片数据进行改变时原有数据也会发生改变
a = np.arange(10)
print(a)
b = a[5:8]
print(b)
b[0] = 100
print(b)
print(a)
如果不想改变原有数组的值,可以使用copy方法
# 如果不想原有数据改变,使用.copy方法
a = np.arange(10)
print(a)
b = a[5:8].copy()
print(b)
b[0] = 100
print(b)
print(a)
4.高维数组切片
# 高维数组切片
a4 = np.arange(24).reshape(2, 3, 4)
print(a4)
print(a4[0])
print(a4[0][1])
print(a4[0][1][2]) # 可以写成[0,1,2]
用冒号对高维数组进行切片
# 用冒号切片
a5 = a4[:, 0, :3] # 第一维全都要,第0行,前三列
print(a5)
a5 = a4[:, 0, 2]
print(a5)
四、布尔索引
# 布尔索引
a = np.arange(20)
a_bool = a > 10
print(a_bool)
a_bool = a[(a > 10) & (a < 15)] # 取出大于10小于15的数
print(a_bool)
# 满足逻辑运算,取反为~
五、广播与转置
1.广播
a = np.arange(10).reshape(2, 5)
print(a)
a = a * 10
print(a)
# 两个同类型数组同一位置进行运算
a = a + a
print(a)
# 两个不同类型的数组,分条件按行广播或者按列广播
2.转置
# 数组的转置
a = np.arange(10).reshape(2, 5)
print(a)
a = a.T
print(a)
六、数组元素的合并与添加
1.第一种合并方法
# 数组元素的合并与添加
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.concatenate((a, b))
print(c)
# axis=0为行变换,axis=1为列变换
c = np.concatenate((a, b), axis=1)
print(c)
第一种方法并不会改变合并后的数组维度
2.第二种合并方法,合并后会增加数组的维度
# 第二种合并方法
a1 = np.array([1, 2, 3, 4])
a2 = np.array([5, 6, 7, 8])
# 组成更高维的数组
a3 = np.stack((a1, a2))
print(a3)
3.数组元素的添加
# 给数组添加元素
a1 = np.append(a1, 5)
print(a1)
设置添加元素的方式采用axis参数,0为按行方向,1为按列方向
a2 = np.array([5, 6, 7, 8]).reshape(2, 2)
print(a2)
a2 = np.append(b, [[9], [10]], axis=1)
print(a2)
4.去重复元素使用unique函数
# 去重元素
a = np.array([1, 2, 1, 1, 2, 3, 1, 4, 5, 6, 1, 4, 6, 3, ])
a = np.unique(a)
print(a)
七、通用函数和统计方法
1.一元通用函数
# numpy的通用函数和统计方法
a = np.arange(10)
a = np.sqrt(a) # 对每一个元素开平方
print(a)
2.二元通用函数
# 二元通用函数
a = np.arange(10)
b = np.arange(10, 0, -1)
c = np.maximum(a, b)
print(c)
# 求均值
middle = np.mean(a)
print(middle)
# 求每一行的均值
a1 = a.reshape(2, 5)
middle = a1.mean(axis=1) # 沿列的方向
print(middle)
middle = a1.mean(axis=0) # 沿行的方向
print(middle)
# 求方差
fangcha = np.std(a1, axis=1)
print(fangcha)
# 求中位数,np.median()
八、排序和搜索
1.顶级方法和对象方法都可以使用
# 排序和搜索,默认使用快排
a = np.random.randn(10)
print(a)
a.sort() # 顶级方法
print(a)
a = np.random.randn(10)
a = np.sort(a) # 对象方法
2.返回索引
# 排序后返回索引
a = np.array([2, 4, 1, 3])
b = np.argsort(a)
print(b)
# 返回最大值索引argmax(),以此类推
b = np.where(a > 2)
print(b) # 找出大于2的索引
九、生成随机数和保存读取数据
1.乱序
'''
np.random.randn(3,4) 生成正态分布随机数
np.random.randint(1,10,(3,4)) 生成随机自然数,从1到10,三行四列
'''
# 乱序
a = np.array([2, 4, 1, 3])
a = np.random.permutation(a)
print(a)
2.随机取出值
# choice方法随机取一个值
num = np.random.choice([1, 2, 3, 4, 5, 6], size=1) # 取一个数
print(num)
num = np.random.choice([1, 2, 3, 4, 5, 6], size=2) # 取两个数
print(num)
# numpy其实是伪随机数,指定np.random.seed()后生成的随机数相同
'''
3.文件的保存和加载
'''
对numpy数组的保存,采用np.save方法,格式为npy,采用np.load方法加载文件
也可以采用np.savetxt()和np.loadtxt()方法存储加载txt文件
'''