定义一个二维数组,输入一个给定值,输出与给定值最接近的数的下标和数本身,
用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])