При использовании scipy.sparse.spdiags или scipy.sparse.diags я заметил, хочу я считаю, что это ошибка в подпрограммы, напримерОшибка в SciPy разреженной конструкции Diags матрицы
scipy.sparse.spdiags([1.1,1.2,1.3],1,4,4).toarray()
возвращается
array([[ 0. , 1.2, 0. , 0. ],
[ 0. , 0. , 1.3, 0. ],
[ 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ]])
То есть для положительных диагоналей он отбрасывает первые k данных. Можно было бы утверждать, что для этого есть какая-то грандиозная причина программирования, и мне просто нужно заполнить нулями. ОК раздражает, как это может быть, можно использовать scipy.sparse.diags, который дает правильный результат. Однако эта процедура имеет ошибку, которая не может быть работал вокруг
scipy.sparse.diags([1.1,1.2],0,(4,2)).toarray()
дает
array([[ 1.1, 0. ],
[ 0. , 1.2],
[ 0. , 0. ],
[ 0. , 0. ]])
хорошо, и
scipy.sparse.diags([1.1,1.2],-2,(4,2)).toarray()
дает
array([[ 0. , 0. ],
[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.2]])
но
scipy.sparse.diags([1.1,1.2],-1,(4,2)).toarray()
вызывает ошибку ValueError: Диагональная длина (индекс 0: 2 при смещении -1) не согласуется с размером матрицы (4, 2). Очевидно, что ответ
array([[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.2],
[ 0. , 0. ]])
и для дополнительного случайного поведения мы имеем
scipy.sparse.diags([1.1],-1,(4,2)).toarray()
давая
array([[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.1],
[ 0. , 0. ]])
Каждые знают, если есть функция для построения диагональных разреженных матриц, что на самом деле работает?
Это похоже на ошибку в 'scipy.sparse.diags'. Рассматривая [источник] (https://github.com/scipy/scipy/blob/v0.16.1/scipy/sparse/construct.py#L63), мы можем видеть, что вычисление длины диагонали - 'm, n = shape ... length = min (m + offset, n - offset) ', и это просто неправильно. Это заслуживает отчета об ошибке. – user2357112
Больше кода в моем ответе. Интересно, правильна ли 'length = min (m + k, n - k)' правильная длина. Это может быть просто совпадение, что работает 'offset = -2'. – hpaulj
Я помню вопрос SO, который противопоставлял «spdiags» эквивалент Matlab. – hpaulj