仅使用 numpy 函数创建 [f0(X,Y),\ldots,fN(X,Y)] 而不使用 for 循环

问题描述 投票:0回答:1

假设我有

n
函数
f1,...,fn
,其中每个函数采用两个相同大小的 numpy ndarray
X,Y
并返回一个相同大小的 ndarray
Z
。有没有一种方法可以在不使用 for 循环或列表理解的情况下创建 ndarray
[f1(X,Y),...,fn(X,Y)]

一个人就能做到

import numpy as np

F = [f1,f2,...,fn] # list of n functions
X = np.zeros(M,N)
Y = np.zeros(X.shape)
Z = np.concatenate([f(X,Y) for f in F])

但后来我使用了循环

[f(X,Y) for f in F]
。我还考虑创建以下功能:

def F(i,X,Y):
    """
    Returns fi(X,Y)
    """
    return ...

然后使用类似

np.fromfunction()
之类的东西,但我不知道如何做。

函数

fi
可以是例如
fi(X,Y)=X*Y**i
,因此它们之间没有依赖关系,可以并行执行。

numpy
1个回答
0
投票

使用示例

f(X, Y) = X*Y**i

import numpy as np
K, M, N = 3, 4, 5
i = np.arange(K)
X = np.zeros((M, N))
Y = np.zeros(X.shape)
Z = X*Y**i.reshape(K, 1, 1)
Z.shape  # (3, 4, 5)

关键部分是将

i
重塑为与X
Y
两个轴
正交
。 NumPy 使用 broadcasting 将所有数组视为具有相同的形状,从而有效地计算
i
X
/
Y
元素的每个组合的函数。

© www.soinside.com 2019 - 2024. All rights reserved.