我定义了一个函数,用于搜索给定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_pick
的A_array[0]
和分配给B_pick
的B_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)