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

Есть ли эквивалент функции MATLAB bsxfun в python?

Я пытаюсь перенести часть моего кода из matlab в python, а в некоторых из них используется функция bsxfun() для виртуальной репликации с последующим умножением или делением (я также использую ее для логических операций). Я хотел бы иметь возможность сделать это без фактической репликации вектора (либо с помощью функции, либо с помощью какой-либо диагональной матрицы) перед умножением или делением на сохранение памяти и времени.

Если в библиотеке C есть эквивалент bsxfun, это, конечно же, будет работать.

4b9b3361

Ответ 1

На самом деле нет эквивалента bsxfun, о котором я знаю, хотя numpy действительно заботится о большом вещании для вас, как говорили другие.

Это обычно рекламируется как преимущество numpy над matlab, и верно, что много вещания проще в numpy, но bsxfun на самом деле более общий, поскольку он может принимать пользовательские функции.

У Numpy есть следующее: http://docs.scipy.org/doc/numpy/reference/generated/numpy.apply_along_axis.html но только для 1d.

Ответ 2

Python очень прост в использовании по сравнению с Matlab bsxfun (x) в python numpy можно легко выполнить с помощью... в массиве [], например. м [...:] Вы можете попробовать следующее:

>>>m = np.zeros([5,13], dtype=np.float32)
>>>print(m)

    [[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]]

>>>c=np.array([[1,2,3,4,5,6,7,8,9,10,11,12,13]])
>>>print(m[...,:] +4*c)
[[  4.   8.  12.  16.  20.  24.  28.  32.  36.  40.  44.  48.  52.]
 [  4.   8.  12.  16.  20.  24.  28.  32.  36.  40.  44.  48.  52.]
 [  4.   8.  12.  16.  20.  24.  28.  32.  36.  40.  44.  48.  52.]
 [  4.   8.  12.  16.  20.  24.  28.  32.  36.  40.  44.  48.  52.]
 [  4.   8.  12.  16.  20.  24.  28.  32.  36.  40.  44.  48.  52.]]