Pandas中是否有简便方法验证矩阵所有值处于两个边界矩阵之间?
在Pandas中验证矩阵值是否处于对应边界范围内的简便方法
当然有啦!Pandas的向量化操作正好能轻松解决这个问题,完全不用写繁琐的循环去逐个判断元素。下面我给你一步步演示怎么实现:
首先,你需要先把matrix_1和matrix_2这两个字典转换成Pandas DataFrame,这样才能和low_border、up_border做对应元素的比较:
import pandas as pd low_border = pd.DataFrame({'A': [1,2], 'B':[2,3]}) up_border = pd.DataFrame({'A': [5,4], 'B':[4,8]}) matrix_1 = pd.DataFrame({'A': [2,3], 'B':[3,4]}) matrix_2 = pd.DataFrame({'A': [6,3], 'B':[3,4]})
核心实现逻辑
我们可以利用Pandas的逐元素比较特性,先判断目标矩阵的每个元素是否大于等于下界矩阵的对应值,再判断是否小于等于上界矩阵的对应值,最后检查所有元素是否都满足这两个条件。
你可以写一个复用性强的函数:
def is_matrix_in_bounds(target_matrix, lower_bound, upper_bound): # 逐元素检查是否 >= 下界 above_low = target_matrix >= lower_bound # 逐元素检查是否 <= 上界 below_high = target_matrix <= upper_bound # 合并两个条件,确认所有元素都满足 return (above_low & below_high).all().all()
调用这个函数就能得到你想要的结果:
print(is_matrix_in_bounds(matrix_1, low_border, up_border)) # 输出 True print(is_matrix_in_bounds(matrix_2, low_border, up_border)) # 输出 False
简化写法(一行搞定)
如果你喜欢更简洁的代码,也可以直接用Pandas的方法链来实现,效果完全一样:
# 验证matrix_1 print((matrix_1.ge(low_border) & matrix_1.le(up_border)).all().all()) # True # 验证matrix_2 print((matrix_2.ge(low_border) & matrix_2.le(up_border)).all().all()) # False
这里ge()等价于>=(greater or equal),le()等价于<=(less or equal),只是写法更贴合Pandas的方法风格。
原理说明
- Pandas中DataFrame之间的比较是向量化的,会自动对每个位置的元素进行比较,返回一个同样形状的布尔值DataFrame。
&运算符会对两个布尔DataFrame做逐元素的逻辑与操作,得到一个新的布尔DataFrame,只有当对应位置的两个条件都满足时才为True。- 第一个
.all()会检查每一列的所有元素是否都为True,返回一个布尔Series;第二个.all()则检查这个Series里的所有值是否都为True,最终得到整个矩阵是否完全符合边界要求的结果。
内容的提问来源于stack exchange,提问作者Ivan Fomin
相关产品推荐
相关产品推荐

