我需要迭代两个数字列表,它们构成了函数的输入。我想用一种实用的方式来做这件事。目前我正在做:
results = []
for i in params_list1:
for j in params_list2:
results.append(myfunction(i,j))其中myfunction()返回一个数字。我很确定有一种方法可以使params_list1和params_list2相乘(也许使用numpy广播?)并将它们映射到myfunction(),但我无法弄清楚。有小费吗?
发布于 2016-04-30 22:30:56
您可以使用itertools.product来完成此操作,还应该考虑使用列表理解或map (如果需要延迟计算),而不是使用list.append。
results = []
for i, j in itertools.product(params_list1, params_list2):
results.append(myfunction(i, j))或者像这样使用map:
result = map(function(i, j) for i, j in itertools.product(params_list1, params_list2))还可以使用Python3.x中的*表达式解压缩参数列表:
result = [myfunction(*item) for item in itertools.product(params_list1, params_list2)]发布于 2016-04-30 22:37:06
矮胖解决方案:
import numpy as np
In [261]: a = np.array([0,1,2,3])
In [262]: b = np.array([2,3,4])
In [263]:
In [263]: np.dstack(np.meshgrid(a, b)).reshape(-1, 2)
Out[263]:
array([[0, 2],
[1, 2],
[2, 2],
[3, 2],
[0, 3],
[1, 3],
[2, 3],
[3, 3],
[0, 4],
[1, 4],
[2, 4],
[3, 4]])发布于 2016-04-30 22:32:53
map(myfunction, params_list1,params_list2)
https://stackoverflow.com/questions/36960919
复制相似问题