numpy模组
直接使用函数
np.arange(start, stop, step) (开始,结束,步长)与原本python原本的range函数方法类似。
np.array() 将列表或字典转化为数组。
np.zeros() 生成全为零的数组,括号内输入行数和列数。
np.ones() 效果和上面差不多,生成全为1的数组,用法和上面一样。
np.empty() 创建一个未初始化的数组,用法和上面一样, 创建的数组会包含随机数。
np.linspace() 创建一个等差数列,括号内输入开始,结束,数量。
np.eye() 创建单位矩阵,括号内输入阶数。
数组函数
定义数组后使用 以arr为例:
arr.reshape() 括号内输入行数和列数,将数组转化为指定行数和列数的数组。
arr.flatten(order = 'C') 将数组转化为一维数组,默认为行展开优先。
参数:order 控制扁平化的顺序,可选值:
'C'(默认):按行优先(C 风格)展开
'F':按列优先(Fortran 风格)展开
'A':如果数组是按列存储的,就按列展开,否则按行展开
'K':按数组在内存中的实际存储顺序展开。arr.T 没有参数,返回数组的转置。
数组的索引与切片
一维数组的索引与切片用法和python列表处理方式一样。
二维数组的索引与切片用法,可以传入两个数字,第一个数字为行数,第二个数字为列数。如果只出入一个数字,则返回该行或该列,但是传入列时行可以空着,但 逗号不能少,否则会默认为输入的时行数,传入行数时怎么这个要求。类似于python嵌套列表的处理方式,只是索引是用中括号分隔的,且没法直接取出第几列,需要用到循环。
更高维的数组,索引与切片用法和二维数组一样,只是传入的参数个数会变多。
布尔索引
详情
一、布尔索引的核心概念
NumPy 的布尔索引是一种通过布尔数组(True/False 数组) 来筛选数组元素的方式,核心逻辑是:用与原数组形状相同的布尔数组作为“掩码”,只保留布尔值为 True 位置对应的元素,最终返回一维数组。
简单来说,你可以把布尔索引理解为:给数组的每个元素贴一个“是否选中”的标签(True=选中,False=不选中),然后只取出贴了“选中”标签的元素。
二、基础用法(一维数组)
先从最简单的一维数组入手,理解布尔索引的基本操作:
import numpy as np
# 1. 创建基础一维数组
arr = np.array([1, 2, 3, 4, 5, 6])
print("原数组:", arr) # 输出 [1 2 3 4 5 6]
# 2. 创建布尔条件(生成与arr形状相同的布尔数组)
# 条件:元素大于3
bool_mask = arr > 3
print("\n布尔掩码:", bool_mask) # 输出 [False False False True True True]
# 3. 应用布尔索引(筛选出满足条件的元素)
filtered_arr = arr[bool_mask]
print("筛选结果:", filtered_arr) # 输出 [4 5 6]
# 简化写法:直接在索引中写条件(无需单独定义bool_mask)
filtered_arr_short = arr[arr > 3]
print("简化写法结果:", filtered_arr_short) # 输出 [4 5 6]关键说明:
- 布尔数组的形状必须和原数组匹配(一维对一维,二维对二维),否则会报错;
- 布尔索引返回的是原数组的副本(修改筛选结果不会影响原数组)。
三、进阶用法(二维数组)
二维数组的布尔索引是实际开发中最常用的场景,支持按行/列、按条件筛选元素或子数组:
import numpy as np
# 1. 创建二维数组(2行3列)
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("原二维数组:")
print(arr_2d)
# 输出:
# [[1 2 3]
# [4 5 6]]
# 2. 条件1:筛选所有大于3的元素(返回一维数组)
filtered_2d_1 = arr_2d[arr_2d > 3]
print("\n所有大于3的元素:", filtered_2d_1) # 输出 [4 5 6]
# 3. 条件2:筛选第二列大于2的行(结合行/列索引)
# 先获取第二列(索引1)的布尔条件,再筛选行
row_mask = arr_2d[:, 1] > 2 # 第二列元素:[2,5],条件>2 → [False, True]
filtered_rows = arr_2d[row_mask]
print("第二列大于2的行:")
print(filtered_rows) # 输出 [[4 5 6]]
# 4. 多条件组合(&=且,|=或,!=非,注意条件需用()包裹)
# 条件:元素大于2 且 小于5
multi_mask = (arr_2d > 2) & (arr_2d < 5)
filtered_multi = arr_2d[multi_mask]
print("\n大于2且小于5的元素:", filtered_multi) # 输出 [3 4]
# 条件:元素小于2 或 大于5
multi_mask2 = (arr_2d < 2) | (arr_2d > 5)
filtered_multi2 = arr_2d[multi_mask2]
print("小于2或大于5的元素:", filtered_multi2) # 输出 [1 6]四、常见应用场景
布尔索引是数据预处理的核心工具,常见用途包括:
1. 替换数组中满足条件的元素
import numpy as np
arr = np.array([1, -2, 3, -4, 5])
# 将所有负数替换为0
arr[arr < 0] = 0
print(arr) # 输出 [1 0 3 0 5]2. 筛选非空/非NaN元素(数据清洗)
import numpy as np
# 创建包含NaN的数组
arr = np.array([1, np.nan, 3, np.nan, 5])
# 筛选非NaN元素(np.isnan()返回布尔数组)
filtered = arr[~np.isnan(arr)] # ~表示取反
print(filtered) # 输出 [1. 3. 5.]3. 按条件统计元素
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 统计大于3的元素个数
count = np.sum(arr > 3)
print("大于3的元素个数:", count) # 输出 3
# 统计每行中大于2的元素个数
row_count = np.sum(arr > 2, axis=1) # axis=1按行统计
print("每行大于2的元素个数:", row_count) # 输出 [1 3]总结
- 核心逻辑:布尔索引通过“布尔掩码”筛选元素,
True保留、False舍弃,返回一维数组(二维数组筛选元素时)。 - 关键语法:多条件组合需用
&(且)、|(或)、~(非),且每个条件必须用()包裹;布尔数组形状需与原数组匹配。 - 核心场景:数据筛选、条件替换、缺失值处理、统计分析,是NumPy数据处理的必备技能。