Подсчет уникальных значений в массиве Numpy: ваше полное руководство

При анализе данных и научных вычислениях Numpy — это мощная библиотека Python, обеспечивающая эффективные числовые операции с массивами и матрицами. Одной из распространенных задач является определение количества уникальных значений в массиве Numpy. В этой статье мы рассмотрим различные методы решения этой задачи, используя простой язык и практические примеры кода.

Методы подсчета уникальных значений:

  1. Использование np.unique():
    Функция np.unique() возвращает массив уникальных элементов во входном массиве и соответствующие им счетчики. Мы можем использовать это для подсчета уникальных значений в массиве Numpy.

    import numpy as np
    arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
    unique_values, counts = np.unique(arr, return_counts=True)
    print(unique_values)  # [1 2 3 4]
    print(counts)         # [1 2 3 4]
  2. Использование np.bincount():
    Функция np.bincount() подсчитывает вхождения каждого неотрицательного целочисленного значения в массиве. Преобразовав массив Numpy в целые числа, мы можем использовать np.bincount() для подсчета уникальных значений.

    arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
    unique_values, counts = np.unique(arr.astype(int), return_counts=True)
    print(unique_values)  # [1 2 3 4]
    print(counts)         # [1 2 3 4]
  3. Использование коллекций.Counter:
    Модуль коллекций в Python предоставляет класс Counter, который может подсчитывать вхождения элементов в итерацию. Мы можем преобразовать массив Numpy в список Python, а затем использовать Collections.Counter для подсчета уникальных значений.

    from collections import Counter
    arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
    unique_values, counts = zip(*Counter(arr.tolist()).items())
    print(unique_values)  # (1, 2, 3, 4)
    print(counts)         # (1, 2, 3, 4)
  4. Использование np.histogram():
    Функция np.histogram() создает гистограмму, вычисляя вхождение значений в указанные интервалы. Мы можем извлечь количество ячеек, чтобы получить количество уникальных значений.

    arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
    counts, bins = np.histogram(arr, bins=np.arange(np.min(arr), np.max(arr)+2))
    print(bins[:-1])  # [1 2 3 4]
    print(counts)     # [1 2 3 4]