我是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/