我的neighh1是1乘10个单元
neighh1 =
第1至6栏
[5x1 double] [3x1 double] [3x1 double] [7x1 double] [4x1 double] [5x1 double]
第7至10栏
[4x1 double] [4x1 double] [3x1 double] [4x1 double]
我想拍摄neighh1的两个细胞,例如neighh1 {1}& neighh1 {3}
neighh1 {1} =
2 4 7 8 10
neighh1 {3} =
5 6 9
我的矩阵N是一个包含0和0的二维数组。 1, 然后我想检查是否N(i,j)== 1。我在哪里j是neighh1 {1}&的元素。 neighh1 {3} 所以如果N(4,7)== 1我想保存4& 7在新矩阵中
答案 0 :(得分:1)
根据您的评论,您只是在寻找一种访问单元格内容的方法。
我认为你正在寻找这样的东西:
for t=1:numel(neighh1{1})
for k = 1:numel(neigh1{3})
N(neighh1{1}(t),neigh1{3}(k))
end
end
如果要直接在循环中将值添加到矩阵中,可以执行以下操作:
M=[];
for t=1:numel(neighh1{1})
for k = 1:numel(neigh1{3})
x = neighh1{1}(t);
y = neigh1{3}(k);
if N(x,y)
M(end+1,:) = [x y];
end
end
end
答案 1 :(得分:1)
如果您想使用两个单元格中包含的两个向量的所有组合来索引N
:
[ii jj] = ndgrid(neighh1{1}, neighh1{3}.')
result = N(sub2ind(size(N), ii,jj));
答案 2 :(得分:0)
如果你想将它应用于所有元素,这是可能的,最简单的。诀窍是,您使用该单元格的子集并通过cellfun
cellfun(@length, neighh([1, 3]))
它返回Vector [5, 3]
。
答案 3 :(得分:0)
A = {[1:4].',[1:3].',[4:7].',[1:7].'}
A =
[4x1 double] [3x1 double] [4x1 double] [7x1 double]
要对所有元素执行函数,您可以直接使用cellfun
,如下所示:
B = cellfun(@sin, A, 'uni', 0);
在此之后,您可以使用常规索引来使用所需的单元格。
如果你真的想在单元格2和3上执行 函数,你可以这样做:
B = cellfun(@sin, A([2, 3]), 'uni', 0);