Как преобразовать одномерный массив в логическую матрицу?

Например, массив array = [1, 3, 1, 2] привести к виду:

array = [[0, 1, 0, 0], 
        [0, 0, 0, 1], 
        [0, 1, 0, 0], 
        [0, 0, 1, 0]]

Вспомним, что в numpy есть метод eye(), который возвращает двумерный массив с единицами по диагонали и заполняет свободные места нулями. Можно быстро сформировать единичную матрицу, а затем передать список нужных индексов numpy-массиву. В итоге получим отсортированную матрицу:

>>> a = np.eye(4)
[Out]: array([[1., 0., 0., 0.],
              [0., 1., 0., 0.],
              [0., 0., 1., 0.],
              [0., 0., 0., 1.]])

>>> indices = [1, 3, 1, 2]
>>> a[indices]
[Out]: array([[0., 1., 0., 0.],
              [0., 0., 0., 1.],
              [0., 1., 0., 0.],
              [0., 0., 1., 0.]])