Python:在数组中找到元素的位置

jul*_*ker 27 python arrays indexing numpy

我有一个CSV,其中包含气象站的最高和最低温度,降水量,经度和纬度等天气数据.每类数据都存储在一个列中.

我想找到最高和最低温度的位置.查找最大值或最小值很简单:numpy.min(my_temperatures_column)

如何找到最小值或最大值所在的位置,以便找到纬度和经度?

这是我的尝试:

def coldest_location(data):

coldest_temp= numpy.min(mean_temp)

    for i in mean_temp:
         if mean_temp[i] == -24.6:
            print i
Run Code Online (Sandbox Code Playgroud)

错误:列表索引必须为int

我将CSV的每个列保存到变量中,因此它们都是单独的列表.

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 
Run Code Online (Sandbox Code Playgroud)

我根据建议list.index(x)解决了这个问题

mean_temp.index(coldest_temp) 

coldest_location=[long[5],lat[5]] 
Run Code Online (Sandbox Code Playgroud)

不确定在问题中询问第二个问题是否合适,但如果有两个位置具有相同的最低温度怎么办?我怎么能找到它们和它们的指数?

Aar*_*ron 57

您是否考虑过使用Python list的.index(value)方法?它返回value传入的第一个实例所在列表中的索引.


Mar*_*cin 14

在没有实际查看数据的情况下,很难说如何在特定情况下找到max和min的位置,但一般情况下,您可以按如下方式搜索位置.这只是一个简单的例子:

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]),)
Run Code Online (Sandbox Code Playgroud)

或者,您也可以执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

  • 为什么 `np.where()` 返回一个包含索引数组的列表,而不仅仅是索引数组?在 https://numpy.org/doc/stable/reference/ generated/numpy.where.html 中看不到答案 (2认同)

Gar*_*127 8

亚伦指出,你可以使用.index(value),但由于这是否会抛出一个异常value不存在,你应该处理的情况下,即使你肯定永远不会发生.有两种选择是首先检查其存在,例如:

if value in my_list:
    value_index = my_list.index(value)
Run Code Online (Sandbox Code Playgroud)

或通过捕获例外,如:

try:
    value_index = my_list.index(value)
except:
    value_index = -1
Run Code Online (Sandbox Code Playgroud)

正确的错误处理永远不会出错.

  • 您可以通过指定缺失值将导致抛出“ValueError”来改进您的答案,因此您应该特别指定“ except ValueError:”。 (3认同)
  • 对于您的第二个问题,您可以使用“列表理解”。这些看起来很棘手,但是一旦你掌握了它们,它们就会使代码非常紧凑。在您的情况下:`[i for i in range(len(my_list)) if my_list[i] == value]` 将返回所请求索引的列表。如果没有匹配项,列表将为空;如果匹配项,列表将包含一个或多个元素。 (2认同)