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

у нас есть большая матрица, сохраненная как 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)

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