按索引选择Cell的某个元素 - 比结构更快

时间:2011-05-23 08:20:17

标签: matlab cell

一些小问题!

  1. 如何在matlab中创建一个空N-by-N单元?
  2. 我有一个N-by-3矩阵
  3. rv=... %# [N-by-3]

    r=sqrt(sum(rv,2).^2); if r < b

    statement1

    end

    Statement是将r的索引保存在向量中(如C)。 像这样:C = [1 3 4 7 9,...] 通过使用该向量,我想选择N×N矩阵的一些元素    2D矩阵的每个元素具有2个索引:(i,j)。如果它们都在索引(C)的向量中,则选择它并将其索引保存在单元格中 这样的事情:D = {[2x1] [2x1] ......} 非常感谢任何指南。 Whishes

    =============================================== ==================================

    对于第二个:

    p=1
    for i=1:N
        if r(i)<R
            L(p)=i;
            p=p+1;
        end
    end
    
    
    L=[.....];
    
    for i=1:length(L)
        for j=1:length(L)
            D{i,j}=C{L(i),L(j)};
        end
    end
    

    但问题是它有一个for结构并且非常慢。我正在寻找更快的东西。也许是combnk

1 个答案:

答案 0 :(得分:1)

不确定我是否理解你的问题。但是我走了。

我首先将L的索引从下标转换为sub2ind的索引。然后,您可以使用生成的索引生成D的矢量化版本,并使用reshape为其提供所需的最终N-D版本。类似的东西:

LInd = sub2Ind(size(C), L, L)
Dvect = C(LInd);
D = reshape(D, Shape_I_Want);

希望这有帮助