2 回答

TA貢獻1906條經(jīng)驗 獲得超3個贊
下面,您可以通過輸入所需的參數(shù)來獲取矩形編號。weight并height顯示矩形的尺寸(在您的示例中為width = 104, height = 68)。xpartition和ypartition參數(shù)顯示每個維度的劃分數(shù)(在您的示例中,36 等分意味著xpartition = 6, ypartition = 6)。xinput和yinput是查詢點的尺寸,需要知道其在指定分區(qū)中的矩形數(shù)(在您的示例中為xinput = 54, yinput = 35)。
import math
def get_rect_num(width, height, xpartition, ypartition, xinput, yinput):
x_step = width / xpartition
y_step = height / ypartition
x = math.ceil((xinput if xinput > 0 else 0.5) / x_step) # handle border cases as well
y = math.ceil((yinput if yinput > 0 else 0.5) / y_step) # handle border cases as well
return (y-1) * xpartition + x
get_rect_num(104, 68, 6, 6, 54, 35)
#> 22
上述計算的時間復(fù)雜度基于Theta(1)四個主要操作。

TA貢獻1803條經(jīng)驗 獲得超6個贊
不是最優(yōu)化的方法(您可以使用itertools),但一種相當(dāng)緊湊的方法就是使用numpy.arange。假設(shè)這是您的實際任務(wù),我不明白為什么該方法需要比這更優(yōu)化。
import numpy as np
SMALL_NUM = 1e-5
def range_pairs(max_value, divisions):
division_length = max_value/divisions
range_values = list(np.arange(0, max_value+SMALL_NUM, division_length))
return [(range_values[i], range_values[i+1]) for i in range(divisions)]
i = 0
for y in range_pairs(68, 6):
for x in range_pairs(104, 6):
i += 1
print(f"For coordinate location x = {x} and y = {y} will be number {i} box")
對于較大的任務(wù),請考慮itertools,并考慮預(yù)先計算range_pairs以下內(nèi)容,或lru_cache在函數(shù)上添加一個range_pairs。
添加回答
舉報