numpy 查找多维数组中每行的最大值索引

zfciruhq  于 2023-06-23  发布在  其他
关注(0)|答案(4)|浏览(143)

我想找到每个数组中最大值的索引。例如:[[1,2,3,4],[5,10,2,3]]应该返回[3,1]
当前代码:

import numpy as np

def display_max(input_array):
    b = np.max(input_array)
    c = np.where(input_array==b)
    return c

display_max([[[7,15,3,10],[2,6,9,0],[20,45,71,500]]])

电流输出:

(array([0], dtype=int64), array([2], dtype=int64), array([3], dtype=int64))

我很困惑为什么第一个数组没有返回正确的值1。但是我想要一个简单的输出,就像上面的例子一样。

ktca8awb

ktca8awb1#

我有两个解决方案给你。数字1:你的输入是一个numpy数组

import numpy as np    
np.argmax(np.array([[7,15,3,10],[2,6,9,0],[20,45,71,500]]), axis=1)

第二:你的输入是(和原来的问题一样)一个列表的列表。没有numpy你也能解决

def display_max_list_of_lists(input_list):
    """find the indicees of the maximum values of lists of lists"""
    res = []
    # loop over list of lists
    for l in input_list:
        # find index of max using a list comprehension
        i0 = [i for i in range(len(l)) if l[i]==max(l)][0]
        res.append(i0)

    return res

print(display_max_list_of_lists([[7,15,3,10],[2,6,9,0],[20,45,71,500]]))

请注意,您的输入列表列表有一个多余的括号...

r6l8ljro

r6l8ljro2#

这可以通过使用内置的max函数和数组index方法来完成,而不需要任何库。对于每个数组,我们可以使用max找到最大值,然后使用index方法找到该值的索引(如果数字出现多次,则将返回第一次出现的索引)。

def display_max(input_array):
    return [row.index(max(row)) for row in input_array[0]]

res = display_max([[[7,15,3,10],[2,6,9,0],[20,45,71,500]]])
print(res)

该输出:

[1, 2, 3]

注意:我索引了input_array的第零个元素,因为在内部数组之前有两级括号。我不知道这是故意的还是打字错误,所以我把它留了下来,以防它是故意的。如果你的输入数组没有额外的级别,例如input_array = [[7,15,3,10],[2,6,9,0],[20,45,71,500]],那么你可以在函数中删除0索引。

zhte4eai

zhte4eai3#

尝试将列表转换为一个numpy数组,如果您想坚持使用一个函数来完成这项工作,可以使用类似的方法

import numpy as np

def display_max(input_array):
    max_indices = np.argmax(np.array(input_array), axis=1)
    return max_indices

max_indices = display_max([[[7,15,3,10],[2,6,9,0],[20,45,71,500]]])
print(max_indices)
8yoxcaq7

8yoxcaq74#

下面的代码将在三维数组中找到最大的数字,而不是每行中的最大数字:

np.max(input_array)

由于最大的数字是500,在三维数组中,它的索引是[0,2,3],这就是为什么它返回0作为第一个维度

相关问题