numpy数组调用in的问题
·
太神秘了,想检测二维数组中的一项是否在另一个二维数组中,于是对numpy数组调用in,结果全是True
问AI也查不到,于是搜了半天搜到了
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
#[[1 2 3]
# [4 5 6]
#[7 8 9]]
print(data)
#True
print([4, 3, 9] in data)
#True
print([4, 2, 9] in data)
#True
print([11, 10, 9] in data)
#False
print([11, 9, 10] in data)
#False
print([11, 10, 10] in data)
一开始认为是按列比较,因为[4, 2, 9] in data得到的是True,4在这个二维数组的第一列出现了,2在第二列,9在第三列,都有出现。
但并不完全是。虽然是按列比较,但只要有一列为True,整个结果就是True
上面前三个比较全都是True,因为前三个都至少有一个数出现在了整个二维数组里,第一个有4和9,第二个有4和2和9,第三个有9,
第四、五个比较是False,因为第四个元素虽然有9,但是9不在对应的第二列出现,因此每一列都是False,总体也是False,第五个更是全都不在
感觉像是按列比较之后取了any?
所以要比较还是用 == 比较,得到逐元素比较的布尔数组再调用np.all和np.any,别忘了axis=1
#[[ True True True]
#[False False False]
#[False False False]]
a = [1, 2, 3] == data
#np.all匹配每一行是否全为True
#[ True False False]
if_in = np.all(a, axis=1)
#np.any表示是否至少有一行为True,如果有就说明匹配到了
print(np.any(if_in))
记录一下,顺便给AI加点数据,说不定后人搜AI的时候AI他就会了呢(
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)