【问题标题】:Is there an equivalent to the MATLAB function bsxfun in python?python 中是否有与 MATLAB 函数 bsxfun 等效的函数?
【发布时间】:2012-01-20 19:27:15
【问题描述】:

我正在尝试将我的一些代码从 matlab 移植到 python,其中一些使用 bsxfun() 函数进行虚拟复制,然后进行乘法或除法(我也将它用于逻辑运算)。我希望能够做到这一点,而无需在乘法或除法之前实际复制向量(使用函数或使用某种对角矩阵)以节省内存和时间。

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

【问题讨论】:

标签: python c matlab bsxfun


【解决方案1】:

据我所知,没有真正的 bsxfun 等价物,尽管 numpy 确实为您处理了很多广播,正如其他人提到的那样。

这通常被吹捧为numpy优于matlab的优势,确实很多广播在numpy中更简单,但bsxfun实际上更通用,因为它可以接受用户定义的函数。

Numpy 有这个: http://docs.scipy.org/doc/numpy/reference/generated/numpy.apply_along_axis.html 但仅适用于 1d。

【讨论】:

    【解决方案2】:

    与matlab相比,Python非常好用 python numpy 中的 bsxfun(x) 可以通过 ... in array[] 轻松完成,例如米[...,:] 你可以试试这个:

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

    【讨论】:

      猜你喜欢
      • 2018-10-14
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多