Python 如何在numpy中将参数为向量的函数向量化
我有一个维数为(n,n,n,3)的numpy数组Python 如何在numpy中将参数为向量的函数向量化,python,numpy,vectorization,Python,Numpy,Vectorization,我有一个维数为(n,n,n,3)的numpy数组R,还有一个函数f,它将一维向量转换为标量。我需要一个新数组a,它与R的关系是 A[i, j, k] = f(R[i, j, k, :]) 如果没有三个for语句,我如何在numpy中实现这一点。理想情况下,您可以通过更改f的实现来实现这一点,以使用适当处理高维输入的技术。例如,您可以将np.sum(whatever)更改为np.sum(whatever,axis=-1)以获得上一个轴上的和,而不是整个数组。这将产生最有效的结果,但这可能很困难或
R
,还有一个函数f
,它将一维向量转换为标量。我需要一个新数组a
,它与R
的关系是
A[i, j, k] = f(R[i, j, k, :])
如果没有三个for语句,我如何在numpy中实现这一点。理想情况下,您可以通过更改
f
的实现来实现这一点,以使用适当处理高维输入的技术。例如,您可以将np.sum(whatever)
更改为np.sum(whatever,axis=-1)
以获得上一个轴上的和,而不是整个数组。这将产生最有效的结果,但这可能很困难或不可能,这取决于f
更慢、更简单的答案是:
对于循环,这比3更漂亮,但可能不会更有效。这取决于
f
是什么。希望它能像在几个地方添加axis
参数一样简单。f
非常复杂,我甚至不想在这里发布它。另一个“诀窍”是将R
重塑为2d,这样你就只在一个轴上建立索引,然后对另一个轴进行切片。然后重新调整结果的形状。换句话说,暂时“展平”i、j、k维度。它不会节省迭代步骤,但应该简化代码。np.vectorize
是否比for循环更有效?当函数采用1d数组而不是标量时,加上vectorize
很难应用。
A = np.apply_along_axis(f, -1, R)