[Python] More efficient weighted Gini coefficient in Python

Discussão em 'Python' iniciado por Stack, Abril 21, 2025.

  1. Stack

    Stack Membro Participativo

    Per https://stackoverflow.com/a/48981834/1840471, this is an implementation of the weighted Gini coefficient in Python:

    import numpy as np
    def gini(x, weights=None):
    if weights is None:
    weights = np.ones_like(x)
    # Calculate mean absolute deviation in two steps, for weights.
    count = np.multiply.outer(weights, weights)
    mad = np.abs(np.subtract.outer(x, x) * count).sum() / count.sum()
    rmad = mad / np.average(x, weights=weights)
    # Gini equals half the relative mean absolute deviation.
    return 0.5 * rmad


    This is clean and works well for medium-sized arrays, but as warned in its initial suggestion (https://stackoverflow.com/a/39513799/1840471) it's O(n2). On my computer that means it breaks after ~20k rows:

    n = 20000 # Works, 30000 fails.
    gini(np.random.rand(n), np.random.rand(n))


    Can this be adjusted to work for larger datasets? Mine is ~150k rows.

    Continue reading...

Compartilhe esta Página