Matlab相当于Numpy广播?

2024-10-01 17:35:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这可能吗?


Tags: 方法内存numpy矩阵数字解决方案向量matlab
3条回答

其他的答案有点过时——Matlab R2016b似乎有added broadcasting as a standard feature。与问题相匹配的博客文章示例:

>> A = ones(2) + [1 5]'
A =
     2     2
     6     6

我不知道这是否会加快代码的速度,但是从向量中减去标量并没有内存问题。因为矩阵的大小是如此的不对称,所以短维上for循环的开销可以忽略不计。

所以也许

matout = matin;
for j = 1:size(matin, 1) %3 in this case
     matout(j,:) = matin(j,:) - vec_to_subtract(j);
end

当然,你可以这样做,但我不知道你是否想保留原始矩阵。

由于像just-in-time acceleration (JITA)这样的编译器优化,循环在MATLAB中不再是坏的。等等,大多数时候,我注意到在当前的MATLAB版本中,使用循环的解决方案比复杂的(尽管很酷:D)一行程序要快得多。

^{}也许可以做到这一点,但在我的经验中,它往往也有内存问题,但比repmat要少。

所以语法应该是:

AA = bsxfun(@minus,A,b)其中b是向量,A是您的大矩阵

但我强烈建议你先分析一下这个错误的版本,然后再做决定!很可能,由于内存限制,您可能没有选择:)

相关问题 更多 >

    热门问题