Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在numpy中将参数为向量的函数向量化_Python_Numpy_Vectorization - Fatal编程技术网

Python 如何在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)以获得上一个轴上的和,而不是整个数组。这将产生最有效的结果,但这可能很困难或

我有一个维数为(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)
以获得上一个轴上的和,而不是整个数组。这将产生最有效的结果,但这可能很困难或不可能,这取决于
f

更慢、更简单的答案是:


对于循环,这比3更漂亮,但可能不会更有效。

这取决于
f
是什么。希望它能像在几个地方添加
axis
参数一样简单。
f
非常复杂,我甚至不想在这里发布它。另一个“诀窍”是将
R
重塑为2d,这样你就只在一个轴上建立索引,然后对另一个轴进行切片。然后重新调整结果的形状。换句话说,暂时“展平”i、j、k维度。它不会节省迭代步骤,但应该简化代码。
np.vectorize
是否比for循环更有效?当函数采用1d数组而不是标量时,加上
vectorize
很难应用。
A = np.apply_along_axis(f, -1, R)