一、numpy基础
1、通过列表创建数组
import numpy as np
import matplotlib.pyplot as plt
arr1 = np.array([1, 2, 3]) # 一维数组
print(arr1, arr1.shape)
arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
print(arr2, arr2.shape)
arr1 = np.random.randint(1,5,(3,4)) # 三行四列,样本取值范围为1,5的整数
print(arr1)
arr2 = np.random.uniform(1,5,(3,4)) # 样本取值范围为1,5的浮点数
print(arr2)
2、 读取本地图片
cat1 = plt.imread("cat.jpg")
print(cat1)
print(type(cat1))
plt.imshow(cat1)
plt.show() # 显示图片
# 图片的维度,任何一张二维图片都能转化成3维数组,(长,宽,颜色)
print(cat1.shape)
# 可以改变图片的颜色
cat2 = cat1 - 50
plt.imshow(cat2)
plt.show()
3、通过np的routlines函数创建数组
arr1 = np.ones(shape = (10, 8), dtype=int) # 创建全1的数组
print(arr1)
arr2 = np.ones(shape=(100, 100 ,3), dtype="float")
plt.imshow(arr2)
plt.show() # 显示一张纯白色的图片
arr2 = np.empty((3,4)) # 初始化数组,不是总返回全0,有时返回内存中的随机值
print(arr2)
arr3 = np.zeros((4, 4)) # 全0数组
print(arr3)
arr4 = np.full((3, 4),fill_value = (3))
print(arr4)
list1 = range(10)
arr4 = np.array(list1) # 将列表转换成数组
print(arr4)
arr5 = np.eye(10) # 10行10列,对角线为1,其他为0
print(arr5, arr5.shape)
arr6 = np.linspace(0 ,100, 20) # 从0到100均匀的划分20份
print(arr6)
arr7 = np.arange(0, 100, 5) # 创建一维数组,左闭右开
print(arr7)
arr8 = np.random.randint(0, 15, 5) # 0到15之间随机生成5个数
print(arr8)
arr9 = np.random.randn(10) # 随机正态分布10个数
print(arr9)
arr10 = np.random.normal(loc = 1, scale = 10, size = 100) # scale是波动系数
print(arr10)
arr11 = np.random.random(size=10) # 生成0到1的随机数
print(arr11)
二、ndarray的基本操作
1、索引
n1 = np.random.randint(0, 100, 10)
print(n1)
print(n1[4])
# 条件索引
year_arr = np.array([[2000,2001,2000],[2005,2002,2009],[2001,2003,2010]]) # 将列表转换为数组
print(year_arr)
is_year_after_2005 = year_arr>=2005
print(year_arr[is_year_after_2005])
2、切片
n2 = np.random.randint(160, size=10)
print(n2)
print(n2[2:5]) #切片时左闭右开
3、变形
n3 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(n3.shape)
print(n3.reshape((5, 2))) # 注意reshape的参数是一个元组
print(cat1.shape)
# 将三维转化成一维数组
cat1.reshape(121*121*3)
# 或者直接 cat1.reshape(-1)
4、级联
级联的参数是列表,一定要加中括号或小括号;
维度必须相同,形状相符,方向默认是shape元组的第一个值所代表的维度;
可通过axis参数改变级联的方向(0或1)
n1 = np.random.randint(0 ,10, size=(5, 5))
n1
np.concatenate((n1, n1), axis=0)
plt.imshow(cat1)
plt.show()
cats = np.concatenate((cat1, cat1)) # 将两张猫图拼接
plt.imshow(cats)
plt.show()
# vstack 垂直 hstack水平
n4 = np.array([2, 3, 4, 5])
np.hstack(n4)
np.vstack(n4)
5、切分
n5 = np.random.randint(0, 10, size=(5, 4))
print(n5)
print(np.split(n5, (2, 4))) # 第2行和第4行分别切一次,分成3个部分
6、副本
所有赋值运算不会为ndarray的任何元素创建副本;
对赋值后的对象的操作也对原来的对象生效
n6 = np.array([1, 2, 3, 4])
n6[3] = 3
print(n6)
# 可使用copy创建副本
n7 = n6.copy()
n7[1] = 0
print(n6)
print(n7)
7、转换数组的类型
float_arr = np.random.rand(3,4)
int32_arr = float_arr.astype(np.int32)
print(int32_arr)
三、ndarray的函数操作
1、元素统计函数
import numpy as np
# 2行3列的成正态分布的数组
arr = np.random.randn(2,3)
print(arr)
print(np.ceil(arr)) # 向上取整
print(np.floor(arr)) # 向下3取整
print(np.rint(arr)) # 四舍五入
print(np.isnan(arr)) # 判断元素是否为NaN
print(np.multiply(arr, arr)) # 元素相乘
print(np.divide(arr,arr)) # 元素相除
print(np.abs(arr)) # 元素的绝对值
# 三元运算符 where(condition,x,y): x if condition else y
print(np.where(np.isnan(arr), 0, arr)) # 如果有空值则用0补上,没有就显示原始值
print(np.where(arr>0, True, False)) # 如果元素>0就显示True,否则显示False
2、聚合函数
arr = np.random.randint(1,10, (3,4))
print(arr)
# 多维数组默认统计全部维度,axis参数为0按列统计,为按行统计
# 求所有元素的平均值
print(np.mean(arr)
# 求所有元素的和
print(np.sum(arr))
# 所有元素的最大值
print(np.min(arr))
# 所有元素的最小值
print(np.max(arr))
# 所有元素的标准差
print(np.std(arr))
# 所有元素的方差
print(np.var(arr))
# 最大值的下标索引值
print(np.argmax(arr))
# 最小值的下标索引值
print(np.argmin(arr))
# 返回一个一维数组,每个元素都是之前所有元素的累加和
print(np.cumsum(arr))
# 返回一个一维数组,每个元素都是之前元素的累乘积
print(np.cumprod(arr))
3、判断函数
arr = np.random.randn(2,3)
print(arr)
# 数组中有一个满足条件则返回True
print(np.any(arr>0))
# 数组中全部满足条件返回True
print(np.all(arr>0))
4、去重排序函数
# 去重排序函数
arr = np.array([[1,2,1],[2,3,4]])
print(arr)
# 找到唯一值并返回排序结果,类似于python的set集合,返回一个一维数组
print(np.unique(arr))
ndarray的矩阵操作
1、算数运算符.加减乘除
n1 = np.random.randint(0, 10, size=(4, 5))
print(n1)
print(n1+2)
print(np.add(n1, 2)) # 效果和上句一样
2、矩阵积
n1 = np.random.randint(1, 5, (2, 3))
n2 = np.random.randint(1, 5, (3, 2))
print(n1)
print(n2)
print(np.dot(n1, n2))
3、广播机制,维度不对应自动补全0
a = np.arange(3).reshape((3, 1))
b = np.arange(3)
c = a + b
print(a)
print(b)
print(c)