问题描述
我想以一种有效的方式将一个函数应用于Numpy矩阵的每一行。我发现使用np.apply_along_matrix(function,1,array)
可以达到预期的效果。但是,这非常慢,尤其是在使用非常大的矩阵时。
我知道将函数映射到矩阵行的更有效且正确的方法是对其向量化,但是我不知道如何正确向量化该函数(请注意,我没有表示np.vectorize(function)
,因为这将适用于每个元素而不是每一行。
import numpy as np
def f(x):
return x * x.sum() # Multiply each element of a vector by the sum of the vector
a = np.arange(10).reshape(2,5)
b = np.apply_along_axis(f,a)
print(b)
# [[ 0 10 20 30 40] Desired output
# [175 210 245 280 315]]
c = f(a)
print(c)
# [[ 0 45 90 135 180] Incorrect output of trying to apply f to matrix a
# [225 270 315 360 405]]
我将如何对这个函数进行向量化,以及像这样的函数来优化速度?
解决方法
您可以使用 vectorization 将函数f应用于2D数组。
a * a.sum(axis=1,keepdims=True)
在这里,我们沿水平轴(1)对数组a
的元素求和,并使其成为列向量(keepdims),以将a
的每一行乘以{和向量。
向量化非常有效。您可以在this webpage
上了解更多信息