python – 返回与UNSORTED多维数组中的B最接近的数字的函数,A?
发布时间:2020-12-20 12:04:38 所属栏目:Python 来源:网络整理
导读:正如标题所述,我想创建一个函数,它将采用多维数组A和数字B,最终返回A中最接近B的数字.如果数字B在A中,则返回它.如果A中有2个与B距离相等的数字,则通过逐行计数来选择第一个数字. 这是我到目前为止的代码: import numpy as npdef g_C(A,B): A = np.asanyarra
正如标题所述,我想创建一个函数,它将采用多维数组A和数字B,最终返回A中最接近B的数字.如果数字B在A中,则返回它.如果A中有2个与B距离相等的数字,则通过逐行计数来选择第一个数字.
这是我到目前为止的代码: import numpy as np def g_C(A,B): A = np.asanyarray(A) assert A.ndim == 2 # to assert that A is a multidimensional array. get = (np.abs(A-B)).argmin() return (A[get]) 但是根据我的理解,我认为(np.abs(M-N)).argmin()实际上只对分类数组有效吗?我不允许在这个问题上对数组进行排序;我必须处理它的面值,逐行检查,并抓住最接近的数字的第一个实例到B. 例如,g_C([[1,3,6,-8],[2,7,1,0],[4,5,2,8],10]],9 )应该返回8 另外,我得到了numpy.argmin会有所帮助的提示,我看到它的目的是提取第一次出现的事情,这在这个问题上是有意义的,但我不确定如何将其完全融入代码我现在有. 编辑 我正在尝试RagingRoosevelt的第二个建议,我被困住了. def g_C(A,B): A = np.asanyarray(A) D = np.full_like(A,B) # created an array D with same qualities as array A,but just filled with values of B diffs = abs(D-A) # finding absolute value differences between D and A close = diffs.argmin(axis=1) # find argmin of 'diffs',row by row close = np.asanyarray(close) # converted the argmins of 'diff' into an array closer = close.argmin() # the final argmin ?? return closer 我正在尝试这个建议,因为我有另外一个与此相关的问题,我必须提取总和是最接近B的数字的行.我认为这是一个好的做法无论如何. 解决方法
您的现有代码很好,但默认情况下,argmin会返回展平数组的索引.所以你可以做到
return A.flat[abs(A - B).argmin()] 从A获得正确的价值 编辑:对于您的其他问题 – 在二维数组A中查找其总和最接近B的行 – 您可以这样做: return A[abs(A.sum(axis=1) - B).argmin()] 无论哪种情况,我都认为没有必要创建一个B数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |