我正在尝试在Matlab中从一个3*(一个大数字)矩阵的每一列中减去一个大小为3的向量。当然,我可以使用循环,但我正在尝试寻找更有效的解决方案,有点像numpy广播。哦,我不能使用repmat,因为我没有足够的内存来使用它(因为它又创建了一个3*(一个大数字)矩阵)……
这个是可能的吗?
发布于 2016-10-18 17:44:41
其他答案有点过时了-- Matlab R2016b似乎有added broadcasting as a standard feature。这篇博客文章中的一个例子与这个问题相匹配:
>> A = ones(2) + [1 5]'
A =
2 2
6 6
发布于 2010-07-13 01:16:05
我不知道这是否会加快代码的速度,但是从向量中减去标量不会有内存问题。由于您的矩阵大小是不对称的,所以在短维上执行for循环的开销可以忽略不计。
所以也许
matout = matin;
for j = 1:size(matin, 1) %3 in this case
matout(j,:) = matin(j,:) - vec_to_subtract(j);
end
当然,您可以就地执行此操作,但我不知道您是否希望保留原始矩阵。
发布于 2010-07-19 21:24:59
实际上,http://www.frontiernet.net/~dmschwarz/genops.html (操作符重载mex文件)似乎也做到了这一点,尽管我还没有测试过它。
https://stackoverflow.com/questions/3213212
复制相似问题