2017-10-11 64 views
-3

假設我創建以下矩陣M.解釋爲MATLAB多維索引

>>>M = reshape(linspace(11,18,8),[2, 2, 2]) 
>>>M(:,:,1) = 

    11 13 
    12 14 


    M(:,:,2) = 

    15 17 
    16 18 

>>>M([1,2],[2, 1],[2,1]) 

>>> 
    ans(:,:,1) = 

    17 15 
    18 16 


    ans(:,:,2) = 

    13 11 
    14 12 

請解釋命令M([1,2],[2,1],[2,1])產生以上結果。詳細解釋索引。

+1

在3D陣列MATLAB保存子矩陣(或稱他們爲子頁面/層)在第三如你在自己的例子中看到的那樣。所以你需要從後面讀取它:你需要第一個矩陣,第二個矩陣,第一個矩陣(最後[2,1]),第一個矩陣(中間[2,1])和最後你需要按照[1,2](第一個)的順序排列這兩行。這就是你得到這個輸出的原因。 – Irreducible

回答

0

讓我們從簡單的例子,

M([1,2],1,1)是要顯示列1和2d矩陣的行1和2 1.

ans = 

    11 
    12 

M([2,1],1,1)是要交換的行1和列2 1和2d矩陣1.

ans = 

    12 
    11 

因此,更改第一個索引會更改行順序。同樣修改第二個索引將改變列順序。修改第三個索引將改變2d矩陣的順序。 現在,讓我們看看小例子,我們去你的問題之前,

M([1,2],[2,1],1) 

交流會第一個二維矩陣的兩行的列。

ans = 

    13 11 
    14 12 

而且M([1,2],[1,2],[2,1])將第一個二維矩陣和第二之間的交流,

ans(:,:,1) = 

    15 17 
    16 18 


ans(:,:,2) = 

    11 13 
    12 14 

所以結合過去的兩個例子交換的二維矩陣,並保持行的命令和交換各自的列是什麼確切地說你的答案顯示

M([1,2],[2, 1],[2,1]) 

ans(:,:,1) = 

    17 15 
    18 16 


ans(:,:,2) = 

    13 11 
    14 12 
0

希望這有助於。

首先,M是一個三維矩陣,它由兩個2x2矩陣組成。因此M(:,:,1)將獲得第一個2x2矩陣,並且M(:,:,2)將獲得第二個2x2矩陣。

一些例子:

M(1, 2, 2)會給答案17,這是在1行該元件與第二矩陣的列2

M(1, 1, [2, 1])將按照該順序給出答案:1511。它將收集第1行和第1行中的元素,它們各自來自[2 1]順序中的兩個矩陣(所以它將從第二個矩陣開始返回)。

M(1, 1, [1, 2])將按照該順序給出答案:1115。它將收集第1行和第1行中的元素,其順序爲[1 2](這樣它將從第一個矩陣開始返回)。

M(1, [1 2], [2, 1])會給出答案:15 17並依次11 13。它將收集第11 & 2(按此順序)的行中的元素,它們各自來自[2 1]順序的兩個矩陣(因此它將從第二個矩陣開始返回)。

M(2, [1 2], [2, 1])將按照該順序給出答案:16 1812 14。它將收集第11 & 2的行2中的元素(按此順序),其中每個元素都來自[2 1]順序中的兩個矩陣(所以它將從第二個矩陣開始返回)。

M(2, [1 1], [2, 1])將按照該順序給出答案:16 1612 12。它將收集11 & 1(*相同列)的行2中的元素,其中每個元素都來自[2 1]順序中的兩個矩陣(所以它將從第二個矩陣開始返回)。

所以,

M([1 2], [2 1], [2, 1])將給出答案:

17 15 
18 16 

(這意味着輸出是一個2×2矩陣,與第1列和第2列是第二列和第一列(分別由[2 1])第一行和第二行是第二矩陣的第一行和第二行(分別由[1 2])。)

並且還有

13 11 
14 12 

....

此外,可能要閱讀的文檔:https://www.mathworks.com/help/matlab/math/matrix-indexing.html