Эффективно вычесть вектор из матрицы (Сципи)

У меня есть большая матрица, хранящаяся как 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 занимает много времени для создания. Я уверен, что есть какой-то волшебный способ сделать это с помощью нарезки и трансляции, но это ускользает от меня.

Спасибо!

РЕДАКТИРОВАТЬ: снято ограничение «на месте», потому что структура разреженности будет постоянно меняться в сценарии назначения на месте.

Ответы на вопрос(3)

Ваш ответ на вопрос