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

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

5个回答

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

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

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]

darklinboxs
darklinboxs 回复justalun: 好像有点问题,我测试了一下,如果把数组的值8换成20,9换成10,然后输入一个20做判定,返回的是20.
大约 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])

在线运行:
图片说明

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复darklinboxs: 我自己写了一个 flatten
大约 2 年之前 回复
darklinboxs
darklinboxs 报错了555,ModuleNotFoundError: No module named 'compiler'
大约 2 年之前 回复

你可能少了包,不纠结了,自己写一个等价的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])
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问