2024-04-28 10:45:33 发布
网友
我有一个二维网格(下面的例子可视化),希望能更好地理解
查找示例:
最初马虎的想法是:
lookupData = { 0 : { 0: "A", 1: "B", 2: "C", 3: "D" }, 25 : { 0: "E", 1: "F", 2: "G", 3: "H"}, ... }
一些google也指出numpy阵列是一个很好的潜在解决方案。任何/所有的建议都是非常感谢-请让我知道如果可以提供更多的细节。只是想从一个有效的方法开始。谢谢
最简单的方法-使其成为嵌套的list,并使用一些简单的算术/类型转换进行查找:
list
values = [['A', 'B', 'C', 'D'], ['E', 'F', 'G', 'H']] lookup = lambda grid, x, y: grid[int(y) // 25][int(x)] lookup(values, 2.3, 24.99) # 'C' lookup(values, 2.5, 25.00) # 'G'
如果y轴标记以不规则排序列表的形式给出,则可以使用bisect在对数时间内找到正确的索引:
bisect
from bisect import bisect y_axis = [0, 25, 75, 190, 225] lookup = lambda grid, x, y: grid[bisect(y_axis, y) - 1][int(x)]
我建议使用pandas-它非常适合您的任务:
pandas
import pandas as pd df = pd.DataFrame({ 0: {0: "A", 1: "B", 2: "C", 3: "D"}, 25: {0: "E", 1: "F", 2: "G", 3: "H"}, 60: {0: "I", 1: "J", 2: "K", 3: "L"}, 90: {0: "M", 1: "N", 2: "O", 3: "P"}}) df = df.T print(df) print() for x, y in [(1.35, 58), (2, 24.99), (2, 25)]: idx = df.index.searchsorted(y, side='right') col = df.columns.searchsorted(x, side='right') print(df.iloc[idx - 1, col - 1])
输出:
0 1 2 3 0 A B C D 25 E F G H 60 I J K L 90 M N O P F C G
最简单的方法-使其成为嵌套的
list
,并使用一些简单的算术/类型转换进行查找:如果y轴标记以不规则排序列表的形式给出,则可以使用
bisect
在对数时间内找到正确的索引:我建议使用
pandas
-它非常适合您的任务:输出:
相关问题 更多 >
编程相关推荐