matlab相当于numpy广播?
-
13-09-2020 - |
题
我试图找到从Matlab中的3 *(大数字)矩阵的每列中减去大小3向量的方法。当然,我可以使用循环,但我正在尝试找到一些更有效的解决方案,有点像numpy广播。哦,我不能使用Repmat,因为我只是没有足够的内存来使用它(因为它创建另外3 *(大数字)矩阵)...
这是可能的吗?解决方案
由于刚刚在matlab中不再是matlab在matlab中不再糟糕-in-time加速(jita)。大部分时间,我注意到当前MATLAB版本中有循环的解决方案是超越复杂(尽管,酷:d)单衬里。
bsxfun
可能会做这个技巧但是,在我的经验中,它往往具有内存问题,而且比世代odicetagcode少。
所以语法是:
repmat
,其中AA = bsxfun(@minus,A,b)
是向量和b
是你的大矩阵
但我敦促您配置循环版本,然后决定!最可能是由于内存约束,您可能没有选择:)
其他提示
其他答案有点超出日期 - matlab r2016b似乎有以标准功能添加广播。来自该博客文章的示例与问题匹配:
>> A = ones(2) + [1 5]'
A =
2 2
6 6
. 我不知道这是否会加快代码,但从向量中减去标量并没有内存问题。由于您的矩阵尺寸是不对称的,因此短尺寸上的用于循环的开销可以忽略不计。
所以也许
matout = matin;
for j = 1:size(matin, 1) %3 in this case
matout(j,:) = matin(j,:) - vec_to_subtract(j);
end
.
当然,你可以做到这一点,但我不知道你是否想要保留原始矩阵。
实际上,似乎 http://www.frontiernet.net/~dmschwarz/genops.html (使用mex文件重载的操作员)也是技巧,即使我还没有测试它。
不隶属于 StackOverflow