从二维到一维数组的索引值

时间:2021-07-31 12:28:24

标签: python

我定义了一个函数,用于搜索给定二维数组 (main_array) 最小值的列和行索引。在这种情况下,main_array 的最小值为 1.1,因此索引应为 [0,2]。然后我必须使用列索引值 0 输入到另一个给定的一维数组 A_array,类似地将行索引值 2 输入另一个给定的一维数组 B_array,即我正在努力解决的部分。

以下是我目前的代码:

import numpy as np

main_array = np.array([[3.1, 2.1, 1.1],
                      [4.1, 1.6, 2.4],
                      [2.2, 3.2, 3.6],
                      [1.5, 2.5, 3.5]])

A_array = np.array([3.7, 4.7, 5.7, 6.7])
B_array = np.array([1.5, 1.8, 2.1])

def min_picks(main_array,A_array,B_array):
    min_index = np.argwhere(main_array == np.min(main_array)) #this gives [[0 2]]
    A_pick = A_array[min_index[0]]
    B_pick = B_array[min_index[-1]]
    return A_pick, B_pick 

该函数应返回分配给 A_array[0]A_pick 的预期答案,以及分配给 B_array[2]B_pick

2 个答案:

答案 0 :(得分:0)

您的数组索引不正确。请尝试以下操作:

main_array = np.array([[3.1, 2.1, 1.1],
                      [4.1, 1.6, 2.4],
                      [2.2, 3.2, 3.6],
                      [1.5, 2.5, 3.5]])

A_array = np.array([3.7, 4.7, 5.7, 6.7])
B_array = np.array([1.5, 1.8, 2.1])

def min_picks(main_array,A_array,B_array):
    min_index = np.argwhere(main_array == np.min(main_array)) #this gives [[0 2]]
    A_pick = A_array[min_index[:,0]][0]
    B_pick = B_array[min_index[:,1]][0]
    return A_pick, B_pick

>>> min_picks(main_array,A_array,B_array)
#(3.7, 2.1)

答案 1 :(得分:0)

您可以使用 reducemin_index 展平,然后从展平列表中轻松访问您需要的内容。

from functools import reduce

def min_picks(main_array,A_array,B_array):
    min_index = reduce(lambda z, y :z + y, np.argwhere(main_array == np.min(main_array)))
    A_pick = A_array[min_index[0]]
    B_pick = B_array[min_index[1]]
    return A_pick, B_pick 

print(min_picks(main_array, A_array, B_array))

这会给你:

(3.7, 2.1)