如何将NumPy数组按元素是否在指定列表中转换为二值数组
你触发报错的原因是a in l语法是将整个NumPy数组作为单个对象,判断它是否是列表l的元素,而非逐元素判断数组内的每个值是否在l中,NumPy无法直接对多元素数组返回单个布尔值,因此触发了真值歧义的报错。
正确实现可以使用NumPy内置的np.isin()方法,它专门用于逐元素判断数组值是否存在于指定序列中,实现代码如下:
import numpy as np # 定义输入数组和匹配列表 a = np.array([[23,43,1],[43,5,0],[5,0,0]]) l = [5,43] # 方法1:直接将布尔结果转为整型,True转1、False转0 result = np.isin(a, l).astype(int) # 方法2:搭配np.where实现,效果和方法1完全一致 # result = np.where(np.isin(a, l), 1, 0)
执行后result的输出就是你需要的二值数组:
array([[0, 1, 0], [1, 1, 0], [1, 0, 0]])
如果处理的数组规模非常大,可以提前将匹配列表转为集合类型提升匹配效率,np.isin内部也会自动做类似的优化,普通场景下直接传入列表即可满足需求。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

