如何有效地将函数逐行应用于 NumPy 矩阵

How do I efficiently apply a function row-wise to a NumPy matrix

我想以高效的方式将函数应用于 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, 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]]

我将如何矢量化这个函数,以及像这样的函数来优化速度?

您可以使用矢量化将函数 f 应用于二维数组。

a * a.sum(axis=1, keepdims=True)

这里,我们将数组a的元素沿横轴(1)求和,做成列向量(keepdims)将a的每一行乘以对应的元素和向量的。

矢量化非常高效。您可以在 this webpage

上了解更多信息