从2D到1D数组的索引值



我定义了一个函数,用于搜索给定2D数组(main_array)的最小值的列和行索引。在这种情况下,main_array的最小值是1.1,因此索引应该是[0,2]。然后,我必须使用列索引值0输入到另一个给定的1D数组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_pickA_array[0]和分配给B_pickB_array[2]的预期答案。

您可以使用reduce来展平min_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)

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

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)

最新更新