Ответы пользователя по тегу Математика
  • Как сосчитать количество чисел в заданном интервале, чей куб оканчивается на 4 или 9?

    adugin
    @adugin
    Решение "в лоб", которого достаточно для выполнения задания:
    sum(1 for x in range(a, b + 1) if x ** 3 % 10 in {4, 9})

    sum(1 for x in range(a, b + 1) if str(x ** 3).endswith(('4', '9')))
    Ответ написан
  • Как найти наибольший общий делитель с округлением?

    adugin
    @adugin
    Можно воспользоваться одним из алгоритмов кластеризации в scikit-learn, например KMeans:
    >>> import numpy as np
    >>> from sklearn.cluster import KMeans
    >>> notes = [145, 160, 112, 170, 281, 292, 258, 305, 257]
    >>> notes = np.array(notes).reshape(-1, 1)
    >>> KMeans(n_clusters=2).fit_predict(notes)
    array([0, 0, 0, 0, 1, 1, 1, 1, 1], dtype=int32)

    Но порядок присвоения номеров кластерам не гарантируется. Кластеризация просто позволяет выборку на N частей, присвоим каждому кластер произвольный порядковый номер. Может быть и так:
    >>> KMeans(n_clusters=2).fit_predict(notes)
    array([1, 1, 1, 1, 0, 0, 0, 0, 0], dtype=int32)
    Ответ написан
    Комментировать
  • Как расширить матрицу по значению python?

    adugin
    @adugin Куратор тега Python
    Вариант №1 - просто вставляем значения исходной матрицы в заданные позиции шаблона:
    >>> matrix = np.array([[1, 2], [3, 4]])
    >>> new_matrix = np.zeros((6, 6), dtype=matrix.dtype)
    >>> new_matrix[1::3, 1::3] = matrix
    >>> new_matrix
    array([[0, 0, 0, 0, 0, 0],
           [0, 1, 0, 0, 2, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 3, 0, 0, 4, 0],
           [0, 0, 0, 0, 0, 0]])


    Вариант №2 - с полноценными преобразованиями:
    >>> matrix = np.array([[1, 2], [3, 4]])
    >>> matrix = matrix.reshape(1, 1, -1)
    >>> matrix = np.pad(matrix, ((1, 1), (1, 1), (0, 0)), 'constant', constant_values=0)
    >>> matrix = matrix.transpose(2, 0, 1).reshape(2, 2, 3, 3)
    >>> matrix = np.hstack(np.hstack(matrix))
    >>> matrix
    array([[0, 0, 0, 0, 0, 0],
           [0, 1, 0, 0, 2, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 3, 0, 0, 4, 0],
           [0, 0, 0, 0, 0, 0]])

    Подозреваю, что можно уменьшить число действий, обойтись без np.stack() и эффективно применить np.lib.stride_tricks.as_strided(), но это лютый мозговынос.
    Ответ написан
    Комментировать