定义一个二维数组,输入一个给定值,输出与给定值最接近的数的下标和数本身,Python

定义一个二维数组,输入一个给定值,输出与给定值最接近的数的下标和数本身,
用Python求解法,谢谢大神。

import numpy as np

ls = np.array([[1, 2, 3, 4],
               [8, 7, 9, 6]])
number = 2.9  # 输入的数
ls_cul = ls - number  # 求距离
ls_abs = abs(ls_cul)  # 求绝对值
argmin = ls_abs.argmin()  # 求最小值位置
print('最接近的数:%d,位置:[%d,%d]' % (ls.reshape(-1)[argmin], argmin / ls.shape[0], argmin % ls.shape[1]))

最接近的数:3,位置:[1,2]

接近的数在二维数组里边,并返回其索引以及数值本身。

不是很清楚为什么是二维数组,不是和一个数字比较么。

思路是按照 abs(x - n) (也就是数组中每个值和你输入的值的差的绝对值)排序,差最小的排第一个,也就是你要的,为了得到下标,用map将下标和值组合下。
下面是程序

# encoding: utf-8

from compiler.ast import flatten

arr = flatten([[1,2,3],[3,2,1],[4,5,6],[8,8,8]])
arr = zip(arr, map(lambda x : (x / 3, x % 3), range(0, len(arr))))
#换成这个可以运行的时候输入 n = input()
n = 4
arr.sort(key=lambda x: abs(x[0] - n))
print(arr[0])

在线运行:
图片说明

你可能少了包,不纠结了,自己写一个等价的flatten

 # encoding: utf-8
import collections

def flatten(x):
    result = []
    for el in x:
        for i in el:
            result.append(i)
    print(result)
    return result

arr = flatten([[1,2,3],[3,2,1],[4,5,6],[8,8,8]])
arr = zip(arr, map(lambda x : (x / 3, x % 3), range(0, len(arr))))
#换成这个可以运行的时候输入 n = input()
n = 4
arr.sort(key=lambda x: abs(x[0] - n))
print(arr[0])