Numpy: преобразование массива в треугольную матрицу

Я искал встроенный метод преобразования линейного массива в треугольную матрицу. Поскольку я не смог найти его, я прошу помощи в его реализации.

Представьте себе массив вроде:

In [203]: dm
Out[203]: array([ 0.80487805,  0.90243902,  0.85365854, ...,  0.95121951,
                  0.90243902,  1.        ])

In [204]: dm.shape
Out[204]: (2211,)

И я хотел бы преобразовать этот массив в треугольную матрицу или симметричную прямоугольную матрицу.

 In [205]: reshapedDm = dm.trian_reshape(67, 67)

Как бы реализовать функцию trian_reshape как функцию, которая возвращает треугольную матрицу из массива 1-D?

Ответ 1

>>> tri = np.zeros((67, 67))
>>> tri[np.triu_indices(67, 1)] = dm

Подробнее см. doc для triu_indices. Чтобы получить нижнетреугольную матрицу, используйте np.tril_indices и установите смещение на -1 вместо 1.