在不同的迭代中访问matlab中的单元格

时间:2014-09-03 20:00:21

标签: matlab

我有这段代码:

M2=[];
for t=1:numel(neighh1{1})
  for k = 1:numel(neighh1{3})
      x = neighh1{1}(t);
      y = neighh1{3}(k);
    if N(x,y)
      M2(end+1,:) = [x y];
    end
  end
end

其中neighh1是1乘10的单元格:

neighh1 =

Columns 1 through 6

[5x1 double]    [3x1 double]    [3x1 double]    [7x1 double]    [4x1 double]    [5x1 double]
Columns 7 through 10

[4x1 double]    [4x1 double]    [3x1 double]    [4x1 double]

N是0和0的二维阵列。 1

我想做同样的事情但不只是neighh1{1}neighh1{3},我想在每次迭代中访问neighh1中的不同单元格。例如:我想在第一次迭代中访问neighh1{1}neighh1{3},然后我想在第二次迭代中访问neighh1{3}neighh1{8}。鉴于迭代次数可根据我的设计而变化。然后,对于每次迭代,我想保存结果。我怎么能这样做?

我尝试通过以下代码修改上述代码:

for i=1:n
    for j=1:n
        if i~=j
           for t=1:numel(neighh1{i})
              for k = 1:numel(neighh1{j})
                 x(i) = neighh1{i}(t);
                 y(j) = neighh1{j}(k);

                 if N(x(i),y(j)) 
                     M(i,j) = mat2cell([x(i), y(j)],length(N(x(i),y(j))),2);
                 end
              end
           end
        end
     end 
 end 

然而,我收到此错误:

The following error occurred converting from cell to double:
Error using double
Conversion to double from cell is not possible.

1 个答案:

答案 0 :(得分:1)

根据我的理解,对于任何给定的列n1n2,您正在尝试构建对(x1,x2)x1 in n1对的矩阵M 。您的单元格x2 in n2包含不同大小的neigh列。

基于这个假设,我认为你正在努力做到这一点:

N

这里有两个重要的优化,所以请耐心等待:

  • 您必须意识到,使用列% Your cell with columns of different length neigh = {}; N = length(neigh); % We already know how many pairs of columns there are npairs = N * (N-1) / 2; M = cell(1,npairs); pcount = 1; % Iterate on each pair of columns for n1 = 1:N for n2 = n1+1:N % Compute the matrix of pairs (x1,x2) given columns n1 and n2 [x1,x2] = meshgrid( neigh{n1}, neigh{n2} ); M{pcount} = [ x1(:), x2(:) ]; pcount = pcount + 1; end end c1是一个对称过程,因此您的索引c2i不应在“没有对角线的矩阵”上运行(即,不同且在1和j之间运行),但仅限于“下三角形部分”(请参阅​​下面带有Nn1的循环)。
  • 然后,对于给定的列n2n1,最好使用函数n2计算这些列中元素对的矩阵(阅读文档)。

我在你的例子中遗漏了一部分,因为我没有足够的信息。矩阵meshgrid未出现在上一代码中。但是,据我所知,N只作为“过滤器”给出,应该采用哪一对;如果需要,您可以在作业N后应用此过滤器。