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

问题描述

我想以一种有效的方式将一个函数应用于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

上了解更多信息

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...