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
,