2015-10-13 246 views
0

的功能,有人能向我解釋這個練習的解決方案:我需要幫助瞭解Matlab的

練習

寫調用的函數odd_index這需要一個矩陣,M,作爲輸入參數和返回矩陣只包含M那些奇數行和列的元素。換句話說,它會在指數(1,1)(1,3)(1,5)返回M元素,...,(3,1)(3,3)(3,5),......,等等。這都說明行和元素的列必須是奇數被列入在輸出中。以下內容不會被退回:(1,2),(2,1),(2,2)因爲行或列或兩者都是偶數。例如,如果M是一個5乘8的矩陣,則輸出必須是3乘4因爲該函數省略了M的第2行和第4行,並且省略了第2行,第4行,第6行和第8行M

解決方案:

 M_out = odd_index function (M) 
 M_out = M (1: 2: end, 1: 2: end); 
end 

Link解決方案:Return only odd elements

可以給我這樣的人解釋他們是如何來到功能M_out = M (1: 2: end, 1: 2: end) ;.

+0

用10票看看答案。這將導致解釋爲什麼你需要'1:2:end'這兩個維度。 – rayryeng

回答

1
function M_out = odd_index (M) 
M_out = M(1: 2: end, 1: 2: end); 
end 

我取矩陣的每個元素M並將其返回到矩陣M_out,

M = [1 2 3; 4 5 6;7 8 9]; 
M_out = odd_index(M) 

M_out = 

    1  3 
    7  9 

在這裏可以看到正在印刷在上的奇數列的奇數行和的元素,但在偶數行和偶數列中的元素被排除在外。

這裏的竅門是通過索引中的2,而不是1。M(1,1)至步驟給出的M的左上角的元件,即,1. M(1:2,1)返回左側列中的前兩個元素:1和4.發生這種情況是因爲n:m創建了一個從nm的步驟爲1的數字向量。您可以通過添加一個數字來更改此步長:n:x:m,其中x指定步數是多大。由於奇數相距2,因此只需在最低正數奇數1處開始載體,並使用大小爲2的步驟。載體1:2:end中的最後一個元素僅表示「矢量的末端」,因此,如果M = [5x3]行數爲end爲5,因爲有五行,並且列的列數爲3,因爲有三列。