Эффективно вычесть вектор из матрицы (Сципи)
у нас есть большая матрица, сохраненная как scipy.sparse.csc_matrix, и мы хотим вычесть вектор столбцов из каждого из столбцов в большой матрице. Это довольно распространенная задача, когда выделаю такие вещи, как нормализация / стандартизация, но я могуКажется, я не нашел правильный способ сделать это эффективно.
Вот'Пример для демонстрации:
# mat is a 3x3 matrix
mat = scipy.sparse.csc_matrix([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]])
#vec is a 3x1 matrix (or a column vector)
vec = scipy.sparse.csc_matrix([1,2,3]).T
"""
I want to subtract `vec` from each of the columns in `mat` yielding...
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]
"""
Один из способов добиться того, чего я хочу, - это hstackvec
3 раза, получая матрицу 3х3, где каждый столбецvec
а затем вычесть это изmat
, Но опять же яЯ ищу способ сделать это эффективно, и для создания матрицы hstacked требуется много времени. Я'я уверен, что естьКакой-то волшебный способ сделать это с помощью нарезки и трансляции, но это ускользает от меня.
Спасибо!
РЕДАКТИРОВАТЬ: Удаленона месте' ограничение, потому что структура разреженности будет постоянно меняться в сценарии назначения на месте.