2015-10-13 251 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,因为有三列。