gal*_*ine 8 memory matlab subtraction
我有M行和4列的矩阵(M1).我有另一个1行和4列的数组(M2).我想通过M2中各自的列元素减去M1中的每个元素.换句话说,M1的每列需要由M2中相同列位置的标量子跟踪.我可以调用repmat(M2,M,1),这会创建一个大小为MxN的新矩阵,其中列中的每个元素都是相同的,然后按元素减法执行元素:
M2new = repmat(M2,M,1)
final = M1 - M2new
Run Code Online (Sandbox Code Playgroud)
但是,这是两行代码并在内存中创建一个新元素.执行此操作的最快且内存最少的方法是什么?
abc*_*bcd 14
使用bsxfun如下例所示.
x=magic(4);
y=x(1,:);
z=bsxfun(@minus,x,y)
z =
0 0 0 0
-11 9 7 -5
-7 5 3 -1
-12 12 12 -12
Run Code Online (Sandbox Code Playgroud)
这z是通过从每行减去第一行得到的.只需x用你的矩阵替换y你的行向量,你就可以了.
eat*_*eat 14
bsxfun(.) 可能会更有效率,但作为旧计时器,我建议不要完全忽略基于线性代数的解决方案,例如:
> M1= magic(4)
M1 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
> M2= M1(1, :)
M2 =
16 2 3 13
> M1- ones(4, 1)* M2
ans =
0 0 0 0
-11 9 7 -5
-7 5 3 -1
-12 12 12 -12
Run Code Online (Sandbox Code Playgroud)
让实际的用例和分析器来决定实际使用的功能.
| 归档时间: |
|
| 查看次数: |
15232 次 |
| 最近记录: |