2016-01-10 100 views
-2

我想有人用MATLAB的知識來幫我整理了這一點,該計劃是寫一個腳本如下enter image description here幾個操作在一個矩陣Matlab的

列2和檢查開始讀取數在柱3如果一個重複它們: 的條件是,如果在列中的數字被重複2多於一次柱3,相應的值在塔4或概括起來,如果未重複從塔2的數僅重複1次柱3,在塔4其相應的值將被保持原樣。獲得的值將在向量中生成。字母放在那裏只是爲了解釋這裏是一個例子,試試

data=[0 1 0  0 
     1 2 1 200 
     2 3 1 300 
     3 4 1 400 
     4 5 2 500 
     5 6 3 600 
     6 7 4 700 
     7 8 5 800 
     8 9 5 900 
     9 10 5 1000 
     10 11 6 1100 
     11 12 7 1200 
     12 13 7 1300]; 

v=[(200+300+400) 200 300 400 (800+900+1000) 600 (1200+1300) 800 900 1000 1100 1200 1300] 

等待任何ideas.Thank你的程序員!

+0

數據將在輸出是什麼,這個'data'例子嗎? –

+2

您能否提供您嘗試過的代碼並詳細說明您使用它的一些問題? – Suever

+0

我只是無法計算如何將給定的條件轉換爲matlab代碼,我添加了希望的結果 – gabby113

回答

1

如果我們打破你的問題,我們可以找出一個方法來得到你的答案。

從本質上講,在第2列(data(:,2))每一個值,我們創建了發現第3列(data(:,2))所有值與之匹配的邏輯矩陣:

toinclude = data(:,3) == data(k,2) 

現在我們需要看多少場比賽有

matches = sum(toinclude) 

如果<2匹配,那麼我們只需使用的值,否則我們總結列中的所有值4

if matches < 2 
    value = data(k,4) 
else 
    value = sum(data(toinclude, 4)); 
end 

而且我們希望在第2列

所有這一切都可以寫成一個for循環來做到這一點的所有元素,但可能有一個在線的解決方案。

output = zeros(size(data, 1), 1); 

for k = 1:size(data,1) 
    toinclude = data(:,3) == data(k, 2); 

    if sum(toinclude) < 2 
     output(k) = data(k, 4); 
    else 
     output(k) = sum(data(toinclude, 4)); 
    end 
end 

爲您提供這會產生以下結果

 900 
    200 
    300 
    400 
    2700 
    600 
    2500 
    800 
    900 
    1000 
    1100 
    1200 
    1300 
+0

嘿喬納森S thanx爲快速回答,您提到的詳細信息已提供(不重複或只重複一次時間),因此如果第2列中的值不存在於第3列中,則該值將被視爲與第3列中重複的一次相同。我已經試過你發佈的代碼與期望的輸出不符,但總體來說,無論如何 – gabby113

+0

@ gabby113我剛剛根據你的澄清編輯了我的答案。請檢查並讓我知道它是如何發生的。 – Suever

+0

k有初始值嗎?我得到這個錯誤?未定義的函數或變量'k'。 – gabby113