【发布时间】:2020-06-01 03:59:57
【问题描述】:
我整个周末都在寻找更优雅(阅读:无需手动 for 循环编程)的解决方案来解决以下问题:
假设我们有一个自定义函数 f(),其输入数量不定。为简单起见,让我们从两个开始:
def f(x,y):
return x + y
现在我将具有正确数量的变量的数组传递给该函数:
x = np.array([x0, x1, x2, ..., xn])
y = np.array([y0, y1, y2, ..., yn])
我寻找的答案是:
z = np.array([[x0 + y0, x0 + y1, x0 + y2, ..., x0 + yn],
[x1 + y0, x1 + y1, x1 + y2, ..., x1 + yn],
[x2 + y0, x2 + y1, x2 + y2, ..., x2 + yn],
...])
因此,总而言之,我正在寻找一个函数,我可以将另一个自定义函数传递给它,然后计算所有可能的组合,而无需编写大量可笑的 for 循环。
请帮助我,蜂巢思维!
编辑 1:自定义函数可能具有任意复杂性。从我的现实世界问题来看,这是一个例子:
def f(x, y):
return 1 - (x/2)**y*binom(y, y/2)
编辑 2:接受的答案按预期工作。链接到stackoverflow.com/a/32742943/6075699 的 Dishin H Goyani 的答案使用不同的路径产生相同的结果。
谢谢大家! Stackoverflow 规则!
【问题讨论】:
-
在 NumPy 之外,您可能还可以使用
itertools.product。 -
你可能想看看 numpy 数组广播 - docs.scipy.org/doc/numpy/user/basics.broadcasting.html
-
@DishinHGoyani:这太棒了!就像二维问题的魅力一样!