Python: encuentra la posición del elemento en la matriz

Tengo un CSV que contiene datos meteorológicos como temperaturas máximas y mínimas, precipitación, longitud y latitud de las estaciones meteorológicas, etc. Cada categoría de datos se almacena en una sola columna.

Quiero encontrar la ubicación de las temperaturas máximas y mínimas. Encontrar el máximo o mínimo es fácil: numpy.min (my_temperatures_column)

¿Cómo puedo encontrar la posición de donde se encuentra el mínimo o el máximo, para poder encontrar la latitud y la longitud?

Aquí está mi bash:

def coldest_location(data): coldest_temp= numpy.min(mean_temp) for i in mean_temp: if mean_temp[i] == -24.6: print i 

Error: los índices de la lista deben ser int

Guardé cada una de las columnas de mi CSV en variables, por lo que son todas listas individuales.

 lat = [row[0] for row in weather_data] # latitude long = [row[1] for row in weather_data] # longitude mean_temp = [row[2] for row in weather_data] # mean temperature 

He resuelto el problema según la sugerencia list.index (x)

 mean_temp.index(coldest_temp) coldest_location=[long[5],lat[5]] 

No estoy seguro si es correcto hacer una segunda pregunta dentro de una pregunta, pero ¿qué sucede si hay dos ubicaciones con la misma temperatura mínima? ¿Cómo podría encontrar ambos y sus índices?

¿Has pensado en usar el .index(value) la lista de Python? Devuelve el índice en la lista donde se encuentra la primera instancia del value pasado.

Sin ver realmente sus datos, es difícil decir cómo encontrar la ubicación de max y min en su caso particular, pero en general, puede buscar las ubicaciones de la siguiente manera. Este es solo un ejemplo simple a continuación:

 In [9]: a=np.array([5,1,2,3,10,4]) In [10]: np.where(a == a.min()) Out[10]: (array([1]),) In [11]: np.where(a == a.max()) Out[11]: (array([4]),) 

Alternativamente, también puedes hacer lo siguiente:

 In [19]: a=np.array([5,1,2,3,10,4]) In [20]: a.argmin() Out[20]: 1 In [21]: a.argmax() Out[21]: 4 

Como indica Aaron, puede usar .index(value) , pero como eso generará una excepción si el value no está presente, debe manejar ese caso, incluso si está seguro de que nunca ocurrirá. Un par de opciones son verificando su presencia primero, tales como:

 if value in my_list: value_index = my_list.index(value) 

o capturando la excepción como en:

 try: value_index = my_list.index(value) except: value_index = -1 

Nunca puedes equivocarte con el manejo adecuado de errores.

Deberías hacer:

 try: value_index = my_list.index(value) except: value_index = -1; 

Hay un método incorporado para hacer esto:

 numpy.where() 

Puede encontrar más información al respecto en la excelente documentación detallada .

Supongo que su variable mean_temp ya tiene los valores cargados y es una dimensión nX1 (es decir, solo una fila). Ahora para lograr lo que quieres, puedes:

Cambia el tipo de datos de tu variable:

 def coldest_location(data): mean_temp = numpy.mat(mean_temp) #data is now matrix type min_index = numpy.nonzero(mean_temp == mean_temp.min()) # this returns list of indexes print mean_temp[min_index[0],min_index[1]] # printing minimum value, ie -24.6 in you data i believe 

Supongamos que si la lista es una colección de objetos como se muestra a continuación:

 obj = [ { "subjectId" : "577a54c09c57916109142248", "evaluableMaterialCount" : 0, "subjectName" : "ASP.net" }, { "subjectId" : "56645cd63c43a07b61c2c650", "subjectName" : ".NET", }, { "subjectId" : "5656a2ec3c43a07b61c2bd83", "subjectName" : "Python", }, { "subjectId" : "5662add93c43a07b61c2c58c", "subjectName" : "HTML" } ] 

Puedes usar el siguiente método para encontrar el índice. Supongamos que el subjectId es 5662add93c43a07b61c2c58c y luego para obtener el índice del objeto en la lista,

 subjectId = "5662add93c43a07b61c2c58c" for i, subjobj in enumerate(obj): if(subjectId == subjobj['subjectId']): print(i) 

Para su primera pregunta, encuentre la posición de algún valor en una lista x usando index (), así:

 x.index(value) 

Para su segunda pregunta, para verificar múltiples valores iguales, debe dividir su lista en partes y usar la misma lógica de arriba. Dicen dividir y conquistar. Funciona. Prueba esto:

 value = 1 x = [1,2,3,4,5,6,2,1,4,5,6] chunk_a = x[:int(len(x)/2)] # get the first half of x chunk_b = x[int(len(x)/2):] # get the rest half of x print(chunk_a.index(value)) print(chunk_b.index(value)) 

¡Espero que ayude!