【发布时间】:2018-02-13 05:51:13
【问题描述】:
我正在尝试加快此功能。它检查字典中是否存在列表值的总和。例如,如果x 在添加[0, 1]、[1, 0]、[0, -1] 和[-1, 0] 后所取的值存在于layout 中,则将其作为选项在输出中删除。例如:
layout = { 0:[2,1], 1:[3,1], 2:[2,2], 3:[6,3] }
x = [2, 1]
possibilities = numpy.zeros(shape=(4,2))
possibilities[0] = [1, 0]
possibilities[1] = [-1, 0]
possibilities[2] = [0, 1]
possibilities[3] = [0, -1]
def myFun(x, layout, possibilities):
new_possibilities = possibilities + x
output_direction = []
for i in new_possibilities:
i = list(i)
output_direction.append( (i in layout.values()) )
output_direction = true_to_false(output_direction)
possibilities = possibilities[output_direction]
if possibilities.size == 0:
possibilities = [0, 0]
return possibilities
else:
return possibilities
# This changes True to False
def true_to_false(y):
output = []
for i in y:
if i == True:
output.append((False))
elif i == False:
output.append((True))
return output
如果我现在运行这个函数,我会得到以下输出:
myFun(x, layout, possibilities)
array([[-1., 0.],
[ 0., -1.]])
我得到这个输出的原因是因为[0, 0] + x在布局中被[2,1]占据,[0,1] + x在布局中被[2,2]占据,[1,0] + x在布局中被[3,1]占据,而@布局中不存在 987654335@ 和 [0, -1] + x,因此这是输出结果。
这个函数运行良好我只是希望它更快,因为布局可能会变得非常大(数万个项目)并且这个函数已经在 for 循环中运行。
【问题讨论】:
标签: python numpy dictionary for-loop