这段python代码试图做什么
下面的python代码以某种特殊顺序遍历(c,g)的2D网格,该网格存储在“jobs”和“job_queue”中。但我不确定在试图理解代码之后它是哪种顺序。是否有人能够说出顺序,并对每个功能的用途进行解释?谢谢和问候这段python代码试图做什么,python,algorithm,search,machine-learning,libsvm,Python,Algorithm,Search,Machine Learning,Libsvm,下面的python代码以某种特殊顺序遍历(c,g)的2D网格,该网格存储在“jobs”和“job_queue”中。但我不确定在试图理解代码之后它是哪种顺序。是否有人能够说出顺序,并对每个功能的用途进行解释?谢谢和问候 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,
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()
导入队列
c_开始,c_结束,c_步骤=-5,15,2
g_开始,g_结束,g_步骤=3,-15,-2
def范围(开始、结束、步骤):
#类似于范围,但也适用于非整数
seq=[]
尽管如此:
如果步骤>0且开始>结束:中断
如果步骤<0且开始<结束:中断
序号追加(开始)
开始=开始+步骤
返回顺序
def排列顺序(顺序):
n=长度(序号)
如果n这里有一个排列顺序
的示例:
print permute_sequence(range(8))
# prints [4, 2, 6, 1, 5, 3, 7, 0]
print permute_sequence(range(12))
# prints [6, 3, 9, 1, 8, 5, 11, 0, 7, 4, 10, 2]
我不确定它为什么使用这种顺序,因为在main
中,我认为所有(c,g)的候选对似乎仍然被计算。permute\u序列
对值列表进行重新排序,使中间值先是每一半的中点,然后是剩余四分之一的中点,依此类推。因此,permute_序列(范围(1000))
开始时是这样的:
[500, 250, 750, 125, 625, 375, ...]
calculate\u jobs
使用permute\u sequence
提供的1D坐标序列交替填充行和列
如果最终要搜索整个二维空间,这无助于更快地完成。你不妨按顺序扫描所有的点。但我认为这个想法是为了在搜索过程中尽早找到一个合适的最小值近似值。我想你也可以通过随机洗牌来改变这个列表
xkcd的读者会注意到,只会给出稍微不同(可能更好)的结果:
我猜它可能打算尝试那些靠近网格中心的网格点,这些网格点似乎更可能是最好的,并且需要更少的时间来训练?请看我以前的帖子。但是我不太明白那里的回答是什么意思。谢谢你,杰森!路径在二维空间中的外观如何?一个远离范围中心的螺旋?如何理解“作业”有一个具有不同对数(c,g)的列表;每个列表中的所有点共享c坐标或gamma坐标。如果绘制点,在每个列表的末尾,您将看到一个矩形网格点,在整个搜索空间中均匀分布。每个列表向该网格添加一行或一列。
[0, 1000, 500, 250, 750, 125, 625, 375, ...]