Matlab相当于Numpy广播?

ant*_*ony 20 python matlab numpy numpy-broadcasting

我试图找到一些方法从Matlab中的3*(一个大数字)矩阵的每一列中减去一个3号向量.当然我可以使用一个循环,但我试图找到一些更有效的解决方案,有点像numpy广播.哦,我不能使用repmat,因为我没有足够的内存来使用它(因为它创建了另一个3*(一个大数字)矩阵)...

这可能吗?

Jac*_*cob 18

由于像即时加速(JITA)这样的编译器优化,MATLAB中的循环也不错.等大多数时候,我注意到,在当前的MATLAB版本环路的解决方案是快于复杂的(尽管,酷:d)单行.

bsxfun可能会做的伎俩,根据我的经验,它往往有内存问题,但不如说repmat.

所以语法是:

AA = bsxfun(@minus,A,b)b矢量在哪里,A是你的大矩阵

但我恳请你介绍一下loopy版本,然后决定!最有可能的是,由于内存限制,您可能没有选择:)

  • 我喜欢`bsxfun`的是,在2010a和2010b版本中,它本身会多线程化你的代码,以提高性能而不需要太多干预. (3认同)
  • 也许这个链接:http://www.mathworks.com/support/solutions/en/data/1-4PG4AN/?solution = 1-4PG4AN,正如你所看到的,多线程只能踢足够大的矩阵. (2认同)

Nat*_*ith 13

其他答案有点过时--Matlab R2016b似乎已将广播作为标准功能添加.该博客文章中的一个示例与该问题相符:

>> A = ones(2) + [1 5]'
A =
     2     2
     6     6
Run Code Online (Sandbox Code Playgroud)

  • 2016b中还有一些其他*惊人的*新功能,比如一流的字符串(https://www.mathworks.com/help/matlab/matlab_prog/create-string-arrays.html),你可以用"+"连接.哦,我只是在讽刺:-) (3认同)