前言
NumPy广播是一种强大的机制,允许NumPy在执行算术运算时处理不同形状的数组。当进行数组运算如加、减、乘、除时,通常这些操作是在数组的对应元素上进行的。如果两个数组形状完全相同,那么这些运算就会无缝执行。但是,当涉及到形状不同的数组时,NumPy的广播规则就会发挥作用。
NumPy 广播是 NumPy 中的一个重要概念,它允许两个形状不同的数组进行运算。两个数组的后缘维度相同,或者在其中一方的维度为1。广播在缺失或者长度为1的维度上补充。
一、广播的规则
NumPy在执行广播时遵循一组特定的规则:
-
如果两个数组的维数不同,较小维度数组的形状将在最左边补1。
-
如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度扩展以匹配另外一个数组的形状。
-
如果在任何一个维度上,两个数组的大小既不相等也没有一个是1,那么会引发异常,因为它们被认为是不兼容的。
二、使用步骤
1.索引及切片
对象[i, j]
对象[行的开始索引:行的结束索引,列的开始索引:列的结束索引]
第一个值索引的是第几行,第二个值索引的是第几列
代码如下(示例):
ar4 = np.arange(5,20)
print(ar4)
# 取9
print(ar4[4])
# 取9到12
print(ar4[4:8])
# 取所有的偶数
print(ar4[1::2])
# 第一行
print(ar5[0]) # 默认的是行
# 取5
print(ar5[1][1])
print(ar5[1,1]) # 逗号前代表行,逗号后代表列
# 取5 6 9 10
print(ar5[1:3,1:3]) # 结束索引不包括
print(ar5[1:3])
2.筛选where
# np.where(条件,条件为真输出的结果,条件为假输出的结果) arr6 = np.random.randn(4,4) np.where(arr6>0,3,-3) arr7 = np.array([2,5,7,9,10]) np.where(arr7>7) # 返回的是满足条件的下标
3.查
any:检查数组中至少有一个True
all:检查是否每个值都是True
4.排序
(1)sort:
import numpy as np
a = np.array([3, 4, 2, 0, 1])
print(a)
a_sort = np.sort(a)
print(a_sort)
# [0 1 2 3 4]
print(a)
# [3 4 2 0 1]
如果要降序使用切片[::-1]
np.sort(a)[::-1]
(2)argsort
import numpy as np
a = np.array([5, 4, 2, 0, 1, 7, 9])
#返回的是下标
a_sort = np.argsort(a)
#下标取值返回排序后的数组
print(a[a_sort])
5.去重unique
6.包含isin-返回布尔数组
import numpy as np
ar1 = np.array([5, 4, 2, 0, 1, 7, 9])
ar2 = [0,2]
print(np.isin(ar1,[2, 3]))
#测试每一个元素是否存在与第二个数组中,返回布尔值
mask = np.isin(ar1,ar2)
print(mask)
#展示符合条件的第一个数组中的元素
tong = ar1[mask]
print(tong)
#展示不符合条件的第一个数组中的元素
tong = ar1[~mask]
print(tong)
三、axis参数
axis=0代表行
axis=1代表列
四、科学计算
1.常用统计函数
求和:sum
平均水平、一般水准:average
平均数、均值:mean
乘积:prod
累积和:cumsum
累积乘积:cumprod
中位数:median
方差:var
标准差:std
百分位数:percentile
分位数:quantile
exam_scores = np.array([85, 78, 92, 88, 70, 95, 80, 85, 90, 78, 84, 88, 92, 86, 75])
# 平均数
mean_score= np.mean(exam_scores)
print(mean_score)
print(np.median(exam_scores))
# 标准差
print(np.std(exam_scores))
# 统计高于平均分的人数
print(np.sum(exam_scores>mean_score))
# 找最高分和最低分
print(np.max(exam_scores))
print(np.min(exam_scores))
2.随机数:random
seed:设置随机数生成器的种子的函数
rand:生成 [0, 1) 区间的均匀分布随机数
randint:生成给定范围内的随机整数
random:生成 [0, 1) 区间的均匀分布随机数,可以指定输出数组的形状
b.astype(int) -astype用来改变数据类型
randn:生成标准正态分布(高斯分布)的随机数数组
choice:从给定的一维数组中随机选择元素
shuffle:就地打乱数组的顺序
permutation:返回一个数组的随机排列
总结
广播机制在数据分析和科学计算中非常有用,它允许你以一种高效和简洁的方式对不同形状的数据集进行运算。例如,在图像处理中,你可能需要将一个三维的RGB图像数组与一个一维的颜色调整数组相乘,广播使得这种类型的操作变得直接而简单。
总的来说,NumPy的广播机制是一个强大的工具,它增强了数组运算的灵活性,同时保持了代码的简洁性和性能。