MATLAB逐元素逻辑比较生成逻辑矩阵的Python等效实现方法
MATLAB数组逻辑比较功能的NumPy实现方案
你要的效果可以直接通过NumPy的广播机制实现,全程无Python层循环,无需依赖pandas,性能最优。
完整实现代码
import numpy as np # 对应MATLAB的a = 1:5 a = np.arange(1, 6) # 对应MATLAB的b数组 b = np.array([1, 5, 4, 4, 7, 8, 1, 3, 2, 10]) # 核心逻辑:将b转为列向量后和a做逐元素相等比较,自动广播为10x5的布尔矩阵 result = b[:, np.newaxis] == a # 如果需要输出0/1格式的整数矩阵,可转为int类型 # result_int = result.astype(int)
输出验证
打印result可得到和你给出的MATLAB结果完全一致的10行5列布尔数组:
[[ True False False False False] [False False False False True] [False False False True False] [False False False True False] [False False False False False] [False False False False False] [ True False False False False] [False False True False False] [False True False False False] [False False False False False]]
原理说明
MATLAB中a == b'的本质是利用隐式广播规则,将形状为(10,1)的列向量和形状为(1,5)的行向量自动扩展为维度匹配的(10,5)矩阵后逐元素比较。NumPy的广播机制完全兼容该逻辑:
b[:, np.newaxis]将原本形状为(10,)的一维数组b调整为形状为(10,1)的二维列向量- 直接和形状为(5,)的一维数组a做相等比较时,NumPy会自动将a广播为(1,5)的行向量,再扩展为(10,5)的矩阵完成逐元素比较,所有运算均在C层面执行,性能远高于循环实现。
内容的提问来源于stack exchange,提问作者user13964861
相关产品推荐
相关产品推荐

