J'ai lu le sujet similaire ici . Je pense que la question est différente ou au moins .index()
ne pourrait pas résoudre mon problème.
C'est un code simple en R et sa réponse:
x <- c(1:4, 0:5, 11)
x
#[1] 1 2 3 4 0 1 2 3 4 5 11
which(x==2)
# [1] 2 7
min(which(x==2))
# [1] 2
which.min(x)
#[1] 5
Ce qui retourne simplement l'index de l'article qui remplit la condition.
Si x
est l'entrée pour Python, comment puis-je obtenir les index pour les éléments qui répondent aux critères x==2
et celui qui est le plus petit du tableau which.min
.
x = [1,2,3,4,0,1,2,3,4,11]
x=np.array(x)
x[x>2].index()
##'numpy.ndarray' object has no attribute 'index'
Numpy a des fonctions intégrées pour cela
x = [1,2,3,4,0,1,2,3,4,11]
x=np.array(x)
np.where(x == 2)
np.min(np.where(x==2))
np.argmin(x)
np.where(x == 2)
Out[9]: (array([1, 6], dtype=int64),)
np.min(np.where(x==2))
Out[10]: 1
np.argmin(x)
Out[11]: 4
Une simple boucle fera:
res = []
x = [1,2,3,4,0,1,2,3,4,11]
for i in range(len(x)):
if check_condition(x[i]):
res.append(i)
Un paquebot avec compréhension:
res = [i for i, v in enumerate(x) if check_condition(v)]
Ici vous avez un live exemple
La méthode basée sur l'indexation python et numpy, qui renvoie la valeur de la colonne souhaitée en fonction de l'index de la valeur minimum/maximum
df.iloc[np.argmin(df['column1'].values)]['column2']
Vous pouvez également utiliser heapq
pour trouver l'index du plus petit. Ensuite, vous pouvez choisir de rechercher plusieurs (par exemple, l’indice des 2 plus petits).
import heapq
x = np.array([1,2,3,4,0,1,2,3,4,11])
heapq.nsmallest(2, (range(len(x))), x.take)
Retourne [4, 0]
NumPy for R vous fournit de nombreuses fonctionnalités de R en Python.
En ce qui concerne votre question spécifique:
import numpy as np
x = [1,2,3,4,0,1,2,3,4,11]
arr = np.array(x)
print(arr)
# [ 1 2 3 4 0 1 2 3 4 11]
print(arr.argmin(0)) # R's which.min()
# 4
print((arr==2).nonzero()) # R's which()
# (array([1, 6]),)