2014-09-03 134 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以供參考。