我有一个二维网格(示例如下所示),希望能更好地理解...
查找示例:
lookupData = {
0 : { 0: "A", 1: "B", 2: "C", 3: "D" },
25 : { 0: "E", 1: "F", 2: "G", 3: "H"},
...
}
一些Google搜索还指出numpy数组是一种很好的潜在解决方案。任何/所有建议都将不胜感激-请让我知道是否可以提供更多详细信息。只是想开始使用一种有效的方法。谢谢!
答案 0 :(得分:1)
最简单的方法-使其嵌套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
在对数时间中找到正确的索引:
from bisect import bisect
y_axis = [0, 25, 75, 190, 225]
lookup = lambda grid, x, y: grid[bisect(y_axis, y) - 1][int(x)]
答案 1 :(得分:1)
我建议使用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