【问题标题】:sparse indexing in matlabmatlab中的稀疏索引
【发布时间】:2014-10-27 21:35:37
【问题描述】:

我有一个很长的代码,其中充满了以下“if”,matlab 编辑器给了我如下建议:

这种稀疏索引表达式可能很慢

mt = rand(200,200);
[c r] = size(mt);
T = sparse(r*c,2);

for i = 1:c 
    for j = 1:r 
        if(ind(j,i)==1)
            templat = template + 1;
            T((i-1)*r+j,2)=100000;
        end
    end;
end;

有什么方法可以让我更快地编写代码并按照 matlab 的建议进行操作吗? (代码可能无法运行,因为我只是选择了几行并试图显示问题)

【问题讨论】:

    标签: matlab signal-processing sparse-matrix


    【解决方案1】:

    嵌套的for's 和if 等价于以下矢量化代码:

    [jj, ii] = find(ind==1); %// jj is rows, ii is columns
    templat = template + numel(ii);
    T((ii-1)*r+jj,2) = 10000;
    

    【讨论】:

    • 实际上我必须使用嵌套的 for 循环。您可以在此处查看代码并更正您的答案:dl.dropboxusercontent.com/u/94718193/code_sparse.m
    • @Sam 这是一个巨大的代码!您希望我们调查整个代码吗?
    • 不,我的意思是代码不仅仅是上面显示的简单代码。我需要使用嵌套的 for 循环代码,因为我需要 indexe
    • @Sam“正确”我的回答在什么意义上?它有什么问题?
    • @Sam Matlab 的建议是删除 for 循环!您的 for 循环和 Luis 的代码完全相同。也许这意味着您可以摆脱代码中的所有循环!
    猜你喜欢
    • 2014-05-12
    • 2015-05-29
    • 1970-01-01
    • 2015-09-02
    • 2018-01-22
    • 2012-01-15
    • 2021-01-28
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多