Подтвердить что ты не робот

Добавление вектора к строкам матрицы в numpy

Есть ли быстрый способ в numpy добавить вектор в каждую строку или столбец матрицы.

В последнее время я разбил вектор на размер матрицы, которая может использовать много памяти. Например

    mat=np.arange(15)
    mat.shape=(5,3)

    vec=np.ones(3)
    mat+=np.tile(vec, (5,1))

Другим способом, я могу думать, является использование цикла python, но циклы медленны:

    for i in xrange(len(mat)):
        mat[i,:]+=vec

Есть ли быстрый способ сделать это в numpy, не прибегая к C-расширениям?

Было бы неплохо иметь возможность нарисовать вектор, как более гибкую версию вещания. Или, чтобы иметь возможность выполнять итерацию по строке или по столбцу, что вы почти можете сделать с помощью некоторых методов ufunc.

4b9b3361

Ответ 1

Для добавления массива 1d к каждой строке, вещание уже позаботится о вас:

mat += vec

Однако в более общем плане вы можете использовать np.newaxis для принуждения массива к широковещательной форме. Например:

mat + np.ones(3)[np.newaxis,:]

Для добавления массива к каждой строке необязательно, это необходимо сделать для добавления по столбцу:

mat + np.ones(5)[:,np.newaxis]

EDIT:, как упоминает Себастьян, для добавления строки mat + vec уже правильно обрабатывает трансляцию. Он также быстрее, чем при использовании np.newaxis. Я отредактировал свой оригинальный ответ, чтобы это было ясно.