Следующий код python должен пересекать 2D-сетку (c, g) в некотором специальном порядке, который хранится в «jobs» и «job_queue». Но я не уверен, какой порядок он пытается понять код. Кто-нибудь может рассказать о заказе и дать какое-то объяснение для каждой функции? Спасибо и приветствую!что этот код python пытается сделать
import Queue
c_begin, c_end, c_step = -5, 15, 2
g_begin, g_end, g_step = 3, -15, -2
def range_f(begin,end,step):
# like range, but works on non-integer too
seq = []
while True:
if step > 0 and begin > end: break
if step < 0 and begin < end: break
seq.append(begin)
begin = begin + step
return seq
def permute_sequence(seq):
n = len(seq)
if n <= 1: return seq
mid = int(n/2)
left = permute_sequence(seq[:mid])
right = permute_sequence(seq[mid+1:])
ret = [seq[mid]]
while left or right:
if left: ret.append(left.pop(0))
if right: ret.append(right.pop(0))
return ret
def calculate_jobs():
c_seq = permute_sequence(range_f(c_begin,c_end,c_step))
g_seq = permute_sequence(range_f(g_begin,g_end,g_step))
nr_c = float(len(c_seq))
nr_g = float(len(g_seq))
i = 0
j = 0
jobs = []
while i < nr_c or j < nr_g:
if i/nr_c < j/nr_g:
# increase C resolution
line = []
for k in range(0,j):
line.append((c_seq[i],g_seq[k]))
i = i + 1
jobs.append(line)
else:
# increase g resolution
line = []
for k in range(0,i):
line.append((c_seq[k],g_seq[j]))
j = j + 1
jobs.append(line)
return jobs
def main():
jobs = calculate_jobs()
job_queue = Queue.Queue(0)
for line in jobs:
for (c,g) in line:
job_queue.put((c,g))
main()
РЕДАКТИРОВАТЬ:
Существует значение для каждого (с, г). Фактически, код должен искать в 2D-сетке (c, g), чтобы найти точку сетки, где значение является наименьшим. Я предполагаю, что код использует какой-то алгоритм эвристического поиска? Исходный код здесь http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/gridsvr/gridregression.py, который является скриптом для поиска алгоритма svm наилучшим значением для двух параметров c и g с минимальной ошибкой проверки.
Спасибо, Джейсон! Как выглядит путь в 2D пространстве? спираль уходит из центра диапазона? Как понять, что «задания» имеют список списков с различным количеством пар (c, g)? – Tim
@Tim Списки - это линии; все точки в каждом списке имеют либо координату c, либо гамма-координату. Если вы начертите точки, в конце каждого списка вы увидите прямоугольную сетку точек, довольно равномерно распределенную по всему пространству поиска. Каждый список добавляет строку или столбец в эту сетку. –