谁能告诉我如何修复以下代码? np.where应该返回索引0。
import numpy as np
listoftups=[("a", "b"), ("n"), ("c","d","e"), ("f", "g")]
np.where(listoftups==("a", "b"))
答案 0 :(得分:4)
np.where(('a','b') in listoftups)
您的代码中的内容返回false
>>> listoftups==("a", "b")
False
位置
>>> ('a','b') in listoftups
True
答案 1 :(得分:2)
假定您要查找元组的索引。这是不需要numpy的解决方案。
listoftups=[("a", "b"), ("n"), ("c","d","e"), ("f", "g")]
search_tuple = ("a", "b")
print(listoftups.index(search_tuple))
将返回0
search_tuple = ("f", "g")
print(listoftups.index(search_tuple))
将返回3
答案 2 :(得分:0)
以下是强制numpy执行您想要的操作的方法:
listoftups=[("a", "b"), ("n"), ("c","d","e"), ("f", "g")]
where
在布尔数组上运行,如果a或b是一个numpy数组,则类似a == b的比较将创建一个布尔数组,但如果两个都是本地python对象,则不是。让我们还创建一个示例,其中包含两个搜索元组。。
arroftups = np.array(listoftups)
twice = np.concatenate(2*[listoftups])
。
probe = np.empty((),object)
probe[()] = "a", "b"
。
np.where(arroftups==probe)
# (array([0]),)
np.where(twice==probe)
# (array([0, 4]),)
请注意,如果您确定确实有一个测试元组出现,那么@ Watchdog101的解决方案可能更好。但这在一般情况下不起作用。