2014-09-03 105 views
0

电池元件的功能我有neighh1即1由10个细胞申请在MATLAB

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} & neigh H1 {3}

neighh1 {1} =

neighh1 {3} =

我有矩阵N是一个二维数组,它包含0 & 1, 然后我想ch eck如果N(i,j)== 1或不。其中i & j是neighh1的元素{1} & neighh1 {3} 因此,如果N(4,7)== 1欲保存4 & 7在一个新的矩阵

+0

你能给一个你想要应用的函数的例子吗?你试过什么了? – sclarke81 2014-09-03 11:11:15

+0

看看内置函数'cellfun' http://www.mathworks.in/help/matlab/ref/cellfun.html – Nishant 2014-09-03 11:13:04

+0

actully它不是MATLAB中的函数,函数是N,其中N是一个2-包含0&1的二维数组,所以我想检查是否N(i,j)== 1。我在哪里是neighh1 {1}&neighh1 {3}的元素 – user3685062 2014-09-03 11:16:09

回答

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 
+0

这个想法我做到了,我的新问题将是如何保存结果。例如:如果N(4,7)== 1;我想在一个新矩阵中保存4和7,我该怎么做这样的事情? – user3685062 2014-09-03 14:20:22

+1

@ user3685062怎么样:'M = []; M(end + 1,:)= [4 7]',如果你知道需要存储多少结果,你可以预先分配合适大小的'M'来提高效率。 – 2014-09-03 14:21:28

+0

,但是当你访问neighh1中的特定元素时,这种特殊情况并不是一般的循环内部元素。 – user3685062 2014-09-03 14:30:23

0

那么这是可能的,最简单的但是,如果您想将其应用于所有元素,关键是,你使用电池的一个子集,并通过cellfun

cellfun(@length, neighh([1, 3])) 

它返回该Vector [5, 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); 
1

如果您想要索引N以及两个单元格中包含的两个向量的所有组合:

[ii jj] = ndgrid(neighh1{1}, neighh1{3}.') 
result = N(sub2ind(size(N), ii,jj)); 

请参阅ndgridsub2ind以供参考。