我试图将我的一些代码从matlab移植到python,并且它的一些使用bsxfun()函数进行虚拟复制,然后乘以或除(我也将它用于逻辑运算)。我希望能够做到这一点,而不用真正复制矢量(无论是用函数还是用某种对角矩阵),然后再乘以或划分以节省内存和时间。在python中是否有与MATLAB函数bsxfun相当的功能?
如果在某种C库中有相当于bsxfun的,那当然也可以。
我试图将我的一些代码从matlab移植到python,并且它的一些使用bsxfun()函数进行虚拟复制,然后乘以或除(我也将它用于逻辑运算)。我希望能够做到这一点,而不用真正复制矢量(无论是用函数还是用某种对角矩阵),然后再乘以或划分以节省内存和时间。在python中是否有与MATLAB函数bsxfun相当的功能?
如果在某种C库中有相当于bsxfun的,那当然也可以。
虽然numpy确实为您提供了许多广播服务,但其他人提到的并非真正与bsxfun相当,我知道。
这通常被认为是numpy优于matlab的优点,确实很多广播在numpy中都比较简单,但bsxfun实际上更通用,因为它可以接受用户定义的函数。
Numpy has this: http://docs.scipy.org/doc/numpy/reference/generated/numpy.apply_along_axis.html 但只限于1d。
与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.]]
如果你正在使用Python数组,你会希望使用是numpy的(www.numpy.org)工作,并numpy的有非常好的广播属性。 (请参阅http://www.scipy.org/EricsBroadcastingDoc获取简短教程。) – DSM
根据此[问题](http://stackoverflow.com/questions/3213212/matlab-equivalent-of-numpy-broadcasting)相当于matlab中的numpy广播是'bsxfun',所以我猜这是相反的。 – jcollado
现在在http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html有一个“官方”numpy广播教程。 DSM建议的教程仍可在https:// github上找到。 COM/DWF /救出-SciPy的维基/ BLOB /主/ EricsBroadcastingDoc.rst – user2809402