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

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

Другие вопросы по тегам