我是Python的新手(过去我使用Mathematica,Maple或Matlab脚本)。 NumPy如何评估数组中的函数,但在尝试在多个维度上实现它时遇到问题,这给我留下了深刻的印象。我的问题很简单(请别笑):是否有一种更优雅,更有效的方法来评估某些函数f(在R ^ 2上定义)而不使用循环?

import numpy
M=numpy.zeros((10,10))
for i in range(0,10):
    for j in range(0,10):
        M[i,j]=f(i,j)
return M

最佳答案

使用numpy编码时,目标是尽可能在整个数组上实现计算。因此,如果您的函数是例如f(x,y) = x**2 +2*y,并且您想将其应用于x,y中的所有整数对[0,10]x[0,10],请执行以下操作:

x,y = np.mgrid[0:10, 0:10]
fxy = x**2 + 2*y


如果找不到以这种方式表达您的功能的方法,则:


询问如何做(并明确说明函数定义)
使用numpy.vectorize


使用vectorize的相同示例:

def f(x,y): return x**2 + 2*y

x,y = np.mgrid[0:10, 0:10]
fxy = np.vectorize(f)(x.ravel(),y.ravel()).reshape(x.shape)


请注意,实际上,当数组的内容不是数字时,我只使用与python vectorize类似的map。一个典型的示例是计算列表数组中所有列表的长度:

# construct a sample list of lists
list_of_lists = np.array([range(i) for i in range(1000)])
print np.vectorize(len)(list_of_lists)
# [0,1 ... 998,999]

关于python - Python:一种通过二维索引评估函数的优雅/有效方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16432249/

10-09 20:29
查看更多