Эффективно вычесть вектор из матрицы (Сципи)
У меня есть большая матрица, хранящаяся как 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 занимает много времени для создания. Я уверен, что есть какой-то волшебный способ сделать это с помощью нарезки и трансляции, но это ускользает от меня.
Спасибо!
РЕДАКТИРОВАТЬ: снято ограничение «на месте», потому что структура разреженности будет постоянно меняться в сценарии назначения на месте.