首页 > 解决方案 > 向量化二维 numpy 数组的函数

问题描述

我想计算我的二维数组的对数比率,例如

a = np.array([[3,2,1,4], [2,1,1,6], [1,5,9,1], [7,8,2,2], [5,3,7,8]])

公式为ln(x/g(x)),其中 g(x) 是每行的几何平均值。我像这样执行它:

    logvalues = np.array(a) # the values will be overwritten through the code below.
    for i in range(len(a)):
        row = np.array(a[i])
        geo_mean = row.prod()**(1.0/len(row))
        flr = lambda x: math.log(x/geo_mean)
        logvalues = np.array([flr(x) for x in row])

我想知道是否有任何方法可以对上述行进行矢量化(最好不引入其他模块)以提高效率?

标签: pythonnumpy

解决方案


这应该可以解决问题:

geo_means = a.prod(1)**(1/a.shape[1])
logvalues = np.log(a/geo_means[:, None])

推荐阅读