Python 二维数组上具有内部和的调用函数
假设我有一个python函数f(),它接受2个标量和1个类似数组的参数:Python 二维数组上具有内部和的调用函数,python,arrays,numpy,vectorization,Python,Arrays,Numpy,Vectorization,假设我有一个python函数f(),它接受2个标量和1个类似数组的参数: def f(a, b, arr): X = a * np.exp(-arr**2 / b) return np.sum(a * np.log(X) - arr) 我想做的是在保持相同arr的情况下,对a和b的不同值计算f() XX, YY = np.meshgrid(A_axis, B_axis) arr = np.arange(10) ZZ = np.empty_like(XX) for i in ra
def f(a, b, arr):
X = a * np.exp(-arr**2 / b)
return np.sum(a * np.log(X) - arr)
我想做的是在保持相同arr的情况下,对a和b的不同值计算f()
XX, YY = np.meshgrid(A_axis, B_axis)
arr = np.arange(10)
ZZ = np.empty_like(XX)
for i in range(XX.shape[0]):
for j in range(YY.shape[1]):
ZZ[i,j] = f(XX[i,j], YY[i,j], arr)
有没有办法将其矢量化?我正在考虑将XX、YY和arr转换为相同形状的3D数组,但f()中的np.sum()将始终返回标量
np.ix_389;()
np.sum()
import numpy as np
### original code
def f(a, b, arr):
X = a * np.exp(-arr**2 / b)
return np.sum(a * np.log(X) - arr)
A_axis = np.linspace(1, 5, 8)
B_axis = np.linspace(1, 2, 9)
XX, YY = np.meshgrid(A_axis, B_axis)
arr = np.arange(10)
ZZ = np.empty_like(XX)
for i in range(XX.shape[0]):
for j in range(YY.shape[1]):
ZZ[i,j] = f(XX[i,j], YY[i,j], arr)
### use broadcast
def f(a, b, arr):
X = a * np.exp(-arr**2 / b)
return np.sum(a * np.log(X) - arr, axis=-1)
B, A, C = np.ix_(B_axis, A_axis, arr)
result = f(A, B, C)
print np.allclose(ZZ, result)
那么它有效吗?你只是想把它矢量化?你是真函数吗?如果是这样的话,它将简化为一个*log(a)-arr*(1-(a/(2*b))。@tom10不,它不是真正的函数:)@Stephan是的,我只想矢量化它有一种不修改f()的方法吗?如果有两个类似数组的参数呢?