在Python中是否有与MATLAB函数bsxfun等价的函数?

23

我正在尝试将一些 Matlab 代码转移到 Python,其中一些代码使用 bsxfun() 函数进行虚拟复制,然后进行乘法或除法运算(我还使用它进行逻辑运算)。为了节省内存和时间,我希望能够在执行乘法或除法之前不实际复制向量(使用函数或对角矩阵等方式)来完成此操作。

如果在某种 C 库中有 bsxfun 的等效函数,那当然也可以使用。


2
根据这个问题,在Matlab中等效于numpy广播的是bsxfun,所以我猜这个也可以反过来用。 - jcollado
1
现在有一个“官方”的numpy广播教程,网址为http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html。DSM建议的教程仍然可以在https://github.com/dwf/rescued-scipy-wiki/blob/master/EricsBroadcastingDoc.rst找到。 - user2809402
2个回答

6

3

与Matlab相比,Python非常易于使用。在Python的NumPy库中,bsxfun(x)可以通过array[]中的...来轻松完成,例如m[...,:]。你可以尝试这样做:

>>>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.]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接