2012-10-12 60 views
2
A=[1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0; 
    0 1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0; 
    0 0 0 1 2 3 4 5 0 0 0 0 0 0 0 0 0; 
    0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5; 
    0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 0 0; 
    0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 0 0]; 

是什麼碼,其中只有具有值大於1且小於4如何統計滿足特定情況的條目數量?

書的要素列數號碼「1」:零被忽略。

因此,我的預期產出是res = 1,僅在第二列。

這裏是我的嘗試:

res = sum(sum(A(2 :end,all(A>1&A<4))==1, 2),1); 

但零仍然在我的代碼計數。

+0

我無法弄清楚你想要什麼......只有值大於1且小於4的列中'1'的計數總是爲零?如果你的意思是包容性的,在你的例子中你有四個不同的列匹配,所有的值都是1。我們需要更多信息。 – Sconibulus

+0

@xxbbcc看看我更新的帖子 – engineering2008

+2

目前還不清楚你想要什麼。值在1和4之間(不包括1和4)的列中的「1」數始終爲零!? –

回答

1

如果我理解正確的話,你可以這樣來做:

開始被發現違反該的A元素,我不是第一個規則中的所有列大於4

[~, del, ~] = find(A>=4)

刪除這些列:

A(:, unique(del)) = []

其中給出:

A = 
1  2  3  0  0  0  0  0 
0  1  2  0  0  0  0  0 
0  0  0  0  0  0  0  0 
0  0  0  0  0  1  2  3 
0  0  0  2  3  0  0  0 
0  0  0  2  3  0  0  0 

現在我們發現,有一個1所有剩餘的列:

[~, c1, ~] = find(A == 1);

而且具有以下的第二個要求比1更大的至少一個值的列:

[~, c2, ~] = find(A > 1)

這些載體c1c2與列數字,我們再簡單的交叉和計數:

numel(intersect(c1, c2))

現在有很多關於這個論壇Matlab的嚮導,我的直覺告訴我有一個更好的答案,那麼也許你應該稍等一下。

相關問題