【发布时间】:2019-03-10 21:35:56
【问题描述】:
我在 MATLAB 中有一个矩阵 A 和一个整数向量 B。然后,我通过删除在B 中由相同整数索引的A 的列并用一列零替换它们来构造一个矩阵D。我对用于构造 D 的代码有疑问,因为它似乎在 MATLAB R2017b 中有效,但在 MATLAB R2015b 中无效。
让我用一个例子更好地解释一下:
b=8;
g=3;
B=[1;2;2;2;3;4;4;5]; %bx1
bnew=size(unique(B),1);
A=[1 2 3 4 5 6 7 8;
9 10 11 12 13 14 15 16;
17 18 19 20 21 22 23 24]; %gxb
矩阵B 告诉我们应该删除A 的哪些列并用一列零替换。例如:B的第二个、第三个、第四个元素相等;这意味着应该删除A 的第二、第三和第四列,并添加一列零。
因此,
D=[1 0 5 0 8;
9 0 13 0 16;
17 0 21 0 24]; %gxbnew
要构造D,我这样做:
C=sparse(1:numel(B),B,1);
E = A * C;
D= E .* (sum(C) <= 1);
注意:将C,E,D 视为稀疏很重要,因为在我的实际情况下它们非常大。在这方面,可以例如考虑通过做得到D
C=sparse(1:numel(B),B,1);
D = E;
D(:, sum(C) > 1) = 0;
但我不想要这个,因为它非常慢。
问题:当我跑步时
C=sparse(1:numel(B),B,1);
E = A * C;
D= E .* (sum(C) <= 1);
在 MATLAB R2017b 中它工作得很好,但是当我在 MATLAB R2015b 中运行它时,它不喜欢最后一行并给出错误
Error using .*
Matrix dimensions must agree.
如何解决这个保存效率问题?
【问题讨论】:
-
谢谢@Adriaan。关于如何在不降低速度的情况下为 Matlab_R2015b 解决此问题的任何想法?
标签: arrays matlab performance matrix