我有一个二维数组,如下所示:
243 432
342 540
150 250
430 100
. .
. .
. .
. .
现在我必须选择一个"完整的行"来自给定的2d数组,这是"最好的"。 "最佳"定义为选择第一列中第一列为最大值(或最接近最大值)的行,第二列中第二列中所有值的最小值(或最接近最小值)。
有没有最佳的执行此操作的方法,最好是在python中?
编辑:在选择行
期间,第二列的权重更大答案 0 :(得分:2)
为什么不对它进行排序并取第一个值? sorted
可以使用一个关键函数来提供值进行排序。
myData = [
[1.0, 2.0, 3.0, 4.0],
[1.1, 2.1, 3.1, 4.1],
[1.2, 2.2, 3.2, 4.2],
[1.3, 2.3, 3.3, 4.3]
]
w1 = 1 # First column weight
w2 = 2 # Second column weight
myRow = sorted(myData, key=lambda x: w2 * x[1] - w1 * x[0])[0]
print(myRow)
对数据没有任何限制,你不能以比线性时间更快的速度执行此操作。
答案 1 :(得分:0)
def mycmp(a, b):
ret = cmp(a[1] - minval, b[1] - minval)
if ret != 0:
return ret
return cmp(maxval - a[0], maxval - b[0])
matrix.sort(cmp=mycmp)
print "Optimal: ", matrix[0]
答案 2 :(得分:0)
如果这不是您想要的,那么您需要更准确地指定何时用较小的第二列值进行权衡,以获得更大的第一行第一列。
如果您无法仅对数组的一部分进行排序(步骤3),则只要您的排序稳定,您也可以使用步骤3,1,4。
请注意,这不是最佳算法,但它会相当接近。