2012-01-20 158 views
18

我试图将我的一些代码从matlab移植到python,并且它的一些使用bsxfun()函数进行虚拟复制,然后乘以或除(我也将它用于逻辑运算)。我希望能够做到这一点,而不用真正复制矢量(无论是用函数还是用某种对角矩阵),然后再乘以或划分以节省内存和时间。在python中是否有与MATLAB函数bsxfun相当的功能?

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

+6

如果你正在使用Python数组,你会希望使用是numpy的(www.numpy.org)工作,并numpy的有非常好的广播属性。 (请参阅http://www.scipy.org/EricsBroadcastingDoc获取简短教程。) – DSM

+2

根据此[问题](http://stackoverflow.com/questions/3213212/matlab-equivalent-of-numpy-broadcasting)相当于matlab中的numpy广播是'bsxfun',所以我猜这是相反的。 – jcollado

+0

现在在http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html有一个“官方”numpy广播教程。 DSM建议的教程仍可在https:// github上找到。 COM/DWF /救出-SciPy的维基/ BLOB /主/ EricsBroadcastingDoc.rst – user2809402

回答

2

与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.]] 
相关问题