在MATLAB中应用单元格元素的函数

时间:2014-09-03 11:05:48

标签: matlab

我的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在新矩阵中

4 个答案:

答案 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));

请参阅ndgridsub2ind以供参考。

答案 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);