如何用NumPy实现数组与向量的布尔比较生成目标矩阵?
解决方案
可以利用NumPy的广播机制实现无循环的向量化运算,核心是将一维数组x转换为二维列向量后与y进行逐元素相等比较:
import numpy as np x = np.array([0.4, 0.6]) y = np.array([0, 0.2, 0.4, 0.6, 0.8, 1]) # 利用广播生成目标布尔矩阵 result = x[:, None] == y print(result)
输出结果:
[[False False True False False False] [False False False True False False]]
原理说明:
x[:, None]将一维数组x的形状从(2,)转换为(2, 1),变成一个列向量;- 当这个列向量与一维数组
y(形状(6,))进行==比较时,NumPy会自动触发广播机制,将y扩展为形状(2, 6)的矩阵,与x的列向量逐元素匹配比较; - 最终得到的
result是形状(2, 6)的布尔矩阵,每行对应x中元素在y中的匹配位置标记为True。
内容的提问来源于stack exchange,提问作者matsuo_basho
相关产品推荐
相关产品推荐

