如何在python中使指示器功能更快或更智能?

如何在python中使指示器功能更快或更智能?,python,indicator,Python,Indicator,我试图用python复制一篇ML论文。我需要做的唯一一件事是更好地使用指示器函数,即:给定一组F,特征fi在其中吗?结果应为1或0。我正在使用矩阵700个样本x 8个功能。我想检查功能是否在集合F中。这是我的代码。它起作用了,但速度很慢。 设X为全矩阵,X[:,i]=feat。F可以是空集,也可以包含X的特征 def I (feat,F): respuesta=[] for i in F: respuesta.append(np.all(i==feat)) if

我试图用python复制一篇ML论文。我需要做的唯一一件事是更好地使用指示器函数,即:给定一组F,特征fi在其中吗?结果应为1或0。我正在使用矩阵700个样本x 8个功能。我想检查功能是否在集合F中。这是我的代码。它起作用了,但速度很慢。 设X为全矩阵,X[:,i]=feat。F可以是空集,也可以包含X的特征

def I (feat,F):

  respuesta=[]
  for i in F:
         respuesta.append(np.all(i==feat))

  if np.any(respuesta)==True:

         result=1
  elif np.any(respuesta)==False:
         result=0
  else:
         raise ValueError('something hapens')

  return(result)

第一个明显的优化是避免调用
np.any(respuesta)
两次。。。这:

if np.any(respuesta)==True:
   result=1
elif np.any(respuesta)==False:
   result=0
return result
可以用

return np.any(respuesta)
但即使这样,也需要构建整个
respuesta
列表,因为一个有效的结果就足够了。因此,您可以在第一个有效结果上返回True:

def I (feat,F):
  for i in F:
     if np.all(i==feat):
         return True
  return False

也许有更好的解决方案,但如果不知道
F
i
feat
到底是什么,就很难说清楚。

F是一个列表(从数学上说是一个集合),i是集合中的特征i,feat是特征。这并不能解释什么是“特征”。一个来自某个ML模型的特征向量,比如你所在城市的房价。