Ответы пользователя по тегу Математические матрицы
  • Как расширить матрицу по значению 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(), но это лютый мозговынос.
    Ответ написан
    Комментировать
  • Как реализовать алгоритм двойной перестановки?

    adugin
    @adugin Куратор тега Python
    def decode(text, xkeys, ykeys):
        return ''.join(text[4*(y-1)+(x-1)] for y in ykeys for x in xkeys)
    
    print decode(u'ТЮАЕООГМРЛИПОЬСВ', (4,1,3,2), (3,1,4,2))

    Для кодирования - по аналогии.
    Ответ написан