Чек numpy.eye . Это работает для вас?
v = [1,2,3]
N = 5
M = 10
arr = np.sum(np.eye(N, k=i, M=10) * j for i, j in enumerate(v))
arr
>>array([[1., 2., 3., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 2., 3., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 2., 3., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 2., 3., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 2., 3., 0., 0., 0.]])
Редактировать (благодаря предложению hpaulj): Если ваша матрица очень большая и имеет множество нулей, вы можете использовать разреженные матрицы
from scipy.sparse import diags
arr = diags(v,offsets=[0,1,2],shape=(N,M))
print(arr.A)
>>array([[1., 2., 3., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 2., 3., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 2., 3., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 2., 3., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 2., 3., 0., 0., 0.]])