Python 如何有效地将函数按行应用于NumPy矩阵
我想以一种有效的方式将一个函数应用于Numpy矩阵的每一行。我发现使用Python 如何有效地将函数按行应用于NumPy矩阵,python,numpy,matrix,vectorization,Python,Numpy,Matrix,Vectorization,我想以一种有效的方式将一个函数应用于Numpy矩阵的每一行。我发现使用np.apply\u沿着矩阵(函数,1,数组)可以得到想要的结果。然而,这是难以置信的慢,特别是当使用非常大的矩阵 我知道将我的函数映射到矩阵行的更有效、更正确的方法是对其进行向量化,但我不知道如何正确地对该函数进行向量化(请注意,我不是指np.vectorize(function),因为这将应用于每个元素,而不是每行) 如何对该函数以及类似于此函数的函数进行矢量化以优化速度?您可以使用矢量化将函数f应用于二维数组 a*a.s
np.apply\u沿着矩阵(函数,1,数组)
可以得到想要的结果。然而,这是难以置信的慢,特别是当使用非常大的矩阵
我知道将我的函数映射到矩阵行的更有效、更正确的方法是对其进行向量化,但我不知道如何正确地对该函数进行向量化(请注意,我不是指np.vectorize(function)
,因为这将应用于每个元素,而不是每行)
如何对该函数以及类似于此函数的函数进行矢量化以优化速度?您可以使用矢量化将函数f应用于二维数组
a*a.sum(axis=1,keepdims=True)
这里,我们沿着横轴(1)对数组a
的元素求和,并将其设为列向量(keepdims),将a
的每一行乘以和向量的相应元素
矢量化非常有效。你可以在网上了解更多
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, 1, 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]]