Python 如果变量不等于向量的任何元素,请选中

Python 如果变量不等于向量的任何元素,请选中,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个媒介犬种,显示了所有四种正在调查的独特犬种 #a set of possible dog species dogSpecies = [1,2,3,4] 我还有一个包含整数的数据向量,对应于所有测试狗的狗种记录 # species of examined dogs data = np.array(1,1,2,-1,0,2,3,5,4) 数据中的某些记录包含不同于1、2、3或4的值。例如-1、0或5。如果数据集中的一个元素不等于dogSpecies的任何元素,则这种情况应在错误评估布尔矩

我有一个媒介犬种,显示了所有四种正在调查的独特犬种

#a set of possible dog species
dogSpecies = [1,2,3,4]
我还有一个包含整数的数据向量,对应于所有测试狗的狗种记录

# species of examined dogs
data = np.array(1,1,2,-1,0,2,3,5,4)
数据中的某些记录包含不同于1、2、3或4的值。例如-1、0或5。如果数据集中的一个元素不等于dogSpecies的任何元素,则这种情况应在错误评估布尔矩阵中标记为False

理想情况下,我的errorEval向量如下所示:

errorEval = np.array[True, True, True, False, False, True, True, False, True]
我想要一段代码,检查数据元素是否与向量元素不相等。出于某种原因,我的代码将errorEval向量的每个元素都标记为“False”

for i in range(np.size(data, axis = 0)):
# validation of the species
            if (data[i] !=  dogSpecies):
                    errorEval[i] = False

我知道我无法将一个元素与上述四个元素的向量进行比较,但我该如何做呢?

这不正是你想要的吗

for index, elem in enumerate(data):
    if elem not in dogSpecies:
        errorEval[index] = False
可能不是很快,它不使用任何矢量化的numpy ufunc,但是如果数组不是很大,那也没关系。将狗种转换成一组也会加快速度


另外,您的python看起来非常像c/java。我建议阅读。

如果我理解正确,您有一个数据框和一个狗种列表。这应该达到你想要的

df = pd.DataFrame({'dog': [1,3,4,5,1,1,8,9,0]})

   dog
0    1
1    3
2    4
3    5
4    1
5    1
6    8
7    9
8    0


df['errorEval'] = df['dog'].isin(dogSpecies).astype(int)

   dog  errorEval
0    1          1
1    3          1
2    4          1
3    5          0
4    1          1
5    1          1
6    8          0
7    9          0
8    0          0

df.errorEval.values
# array([1, 1, 1, 0, 1, 1, 0, 0, 0])
如果不想创建新列,则可以执行以下操作:

df.assign(errorEval=df['dog'].isin(dogSpecies).astype(int)).errorEval.values
# array([1, 1, 1, 0, 1, 1, 0, 0, 0])

正如@FHTMitchel所述,您必须使用in来检查元素是否在列表中。 但您可以使用列表理解,它比普通循环更快,也更短:

errorEval = np.array([True if elem in dogSpecies else False for elem in data])

因此,您需要一个列,指示您的dogSpecies列表中是否存在dog列值,我的理解是否正确?现在,您正在检查我假设int的数据元素是否不等于列表,它的计算结果将始终为false。提供数据/输入和预期结果的最小示例总是有帮助的。另请阅读,您可以使用数据帧列的属性df.iloc[:,3]从数据帧列中获取numpy数组。值如果OP澄清,更好更有效的方法是,仅使用pandas函数,并将其转换为数组作为最后一步,这样它就可以矢量化。这就是我想要实现的,是的。我只想把它放在一个单独的向量中,而不是数据帧中。无论如何谢谢你!您不需要在数据框中设置它,请参阅我的更新答案
errorEval = np.array([True if elem in dogSpecies else False for elem in data])