Я хочу расширить ось ndarray
до диагональной матрицы в стиле diagflat
Например,
In [ ]: import numpy as np
In [ ]: example = np.random.random((200, 5))
In [ ]: example.shape
Out[ ]: (200, 5)
То, что я ищу, это что-то вроде:
In [ ]: np.diagflat(example, axis=-1).shape
Out[ ]: (200, 5, 5)
diagflat
имеет, однако, axis
аргумент.Моя идея заключалась в том, чтобы просто вставить новую ось, например, и умножить ее на единичную матрицу.
In [ ]: Id = np.eye(example.shape[-1])
In [ ]: (example[..., np.newaxis] @ Id).shape
ValueError: shapes (200,5,1) and (5,5) not aligned: 1 (dim 2) != 5 (dim 0)
Однако это вызывает ошибку, по-видимому, широковещательная передача не применяется для умножения матриц.Есть ли элегантное решение, или мне нужно создать и заполнить массив вручную?