我有这段代码:
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.
答案 0 :(得分:1)
根据我的理解,对于任何给定的列n1
和n2
,您正在尝试构建对(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
是一个对称过程,因此您的索引c2
和i
不应在“没有对角线的矩阵”上运行(即,不同且在1和j
之间运行),但仅限于“下三角形部分”(请参阅下面带有N
和n1
的循环)。n2
和n1
,最好使用函数n2
计算这些列中元素对的矩阵(阅读文档)。我在你的例子中遗漏了一部分,因为我没有足够的信息。矩阵meshgrid
未出现在上一代码中。但是,据我所知,N只作为“过滤器”给出,应该采用哪一对;如果需要,您可以在作业N
后应用此过滤器。