【问题标题】:How to get index of multiple arrays in a list in python如何在python的列表中获取多个数组的索引
【发布时间】:2021-05-18 19:06:22
【问题描述】:

我正在尝试从包含 5 个数组的列表中提取特定值。首先,我找到每个数组的最大值并将其定义为 maxElements。然后我尝试将“test_list”中的每个元素与 maxElements 中的每个值进行匹配,以找到特定的索引。但我得到以下错误代码:

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

我该如何解决这个问题,所以我只能获取列表中每个数组中最大值的索引??

maxElements = np.amax(test_list,axis=1) 

res_list = []
for i in range(0, len(test_list)) :
    if test_list[i] == maxElements[i] :
        res_list.append(i)

【问题讨论】:

  • test_list 是一个 numpy 数组。如果例如test_list = ([1,2,3], [4,5,6]),len(test_list) 将返回 2,因为每个数组元素都是对另一个一维数组的引用。即 test_result[0] 是 [1,2,3] 和 test_result[1] = [4,5,6] 的参考。当您执行 test_list[i] == maxElement[i] 时,您实际上是在尝试将此引用与整数值进行比较。
  • 那么如何将 test_list 中的每个值与 maxElement 列表进行比较?
  • 你试过'numpy.argmax'吗?它沿给定轴检索最大值的索引。 numpy.org/doc/stable/reference/generated/numpy.argmax.html

标签: python arrays indexing


【解决方案1】:

我认为您可以简单地遍历列表,并为每个列表找到最大值的索引list.index(max_value)。请注意,这只会让您获得最大值的第一个索引,列表中可能会有更多的最大值。

res_list = []
for i in range(0, len(test_list)) :
    res_list.append(test_list[i].index(max(test_list[i])))

此外,如果 test_list 只是一个列表数组,您可以在没有范围的情况下定期循环它。所以:for list in test_list.

【讨论】:

  • 你在使用 numpy 吗?导致我收到另一条错误消息:“numpy.ndarray”对象没有属性“index”
  • @CecilieHansen 然后在 for 循环的开头添加这一行:curr_list = test_list[i].tolist(),并将附加行中的test_list[i] 替换为curr_list
  • 不知何故,这只是给了我 test_list 的长度。我的代码目前如下res_list = [] for list in dfd_sigma_values : curr_list = dfd_sigma_values[i].tolist() res_list.append(curr_list.index(max(curr_list))) 好的,我对此完全陌生,哈哈,我不知道如何在评论部分编写代码
  • @CecilieHansen 如果在创建 curr_list 后打印 curr_listtype(curr_list),它会显示什么?您的数组列表中的正确列表/数组?
  • curr_list 以列表形式出现,而 curr_list 仅将所有 5 个数组的列表作为一个。
【解决方案2】:

根据您的 numpy 数组类型,maxElements = np.amax(test_list,axis=1) 将返回一个包含一个或多个元素的数组。例如如果test_list = ([1,2,3], [4,5,6]) 那么maxElements = [3,6]

res_list = []
for i in range(0, len(test_list)) :
    if test_list[i] == maxElements[i] :
        res_list.append(i)

在上面的代码中,您试图将引用类型等同于整数类型,因此会出现错误。循环遍历 numpy 数组中包含的每个单独的数组并比较元素,如下所示。

res_list = []
    for i in range(0, len(test_list)) :
        for each_element in test_list[i]:
            if each_element == maxElement[i]
                res_list.append(i)

【讨论】:

    猜你喜欢
    • 2021-08-11
    • 2012-05-30
    • 2015-08-25
    • 2021-01-23
    • 2023-02-25
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多