簡體   English   中英

如何在MATLAB中打印循環矩陣(toeplitz),其中每個輸入都是3維mxmx 3的3D矩陣?

[英]How to print a circulant matrix (toeplitz), in MATLAB, where each input is a 3D matrix of dimention m x m x 3?

我知道如何在MATLAB中使用toeplitz函數來創建一維矢量的循環矩陣。 但是,我正在嘗試創建循環塊

例如,我有3個大小為(2,2,3)的矩陣,其中第三維是R,G,B:在下面,我顯示了每個矩陣的行和列的樣本值。 第一矩陣:

# 01  02
# 03  04

第二矩陣:

# 05  06
# 07  08

第三矩陣:

# 09  10
# 11  12

現在我想創建一個循環矩陣,看起來像這樣

# 01  02  05  06  09  10
# 03  04  07  08  11  12
# 09  10  01  02  05  06
# 11  12  03  04  07  08
# 03  04  09  10  01  02
# 05  06  11  12  03  04

注意,我希望能夠將矩陣的整個塊向后移動到右側,而不僅僅是矩陣的第一行。 請注意,我要保留這些矩陣的第三個維w(其中具有顏色維)

有人可以告訴我如何進行嗎? 我想制作一個數組,但我已經有了一個3D矩陣,並且不知道如何制作一個數組,如果有幫助的話。

參考文獻:

以下代碼將線性索引構建為兩個部分的總和:

  • 描述塊結構的“外部”模式(由repelem生成),以及
  • 具有塊結構重復的“內部”模式(使用repmat )。

將此索引應用於原始矩陣會產生所需的結果。

data = cat(3, [1 2; 3 4], [5 6; 7 8], [9 10; 11 12]); % example data
[L, M, N] = size(data);
ind_outer = repelem(mod(bsxfun(@minus, 0:N-1, (0:N-1).'), N), L, M);
ind_inner = repmat(reshape(1:L*M, L, M), N, N);
ind = ind_outer*L*M + ind_inner;
result = data(ind);

這給

result =
     1     2     5     6     9    10
     3     4     7     8    11    12
     9    10     1     2     5     6
    11    12     3     4     7     8
     5     6     9    10     1     2
     7     8    11    12     3     4

為了更好地理解它是如何工作的,請參閱外部和內部索引模式(如果需要,請閱讀有關線性索引的信息 ):

>> ind_outer
ind_outer =
     0     0     1     1     2     2
     0     0     1     1     2     2
     2     2     0     0     1     1
     2     2     0     0     1     1
     1     1     2     2     0     0
     1     1     2     2     0     0

>> ind_inner
ind_inner =
     1     3     1     3     1     3
     2     4     2     4     2     4
     1     3     1     3     1     3
     2     4     2     4     2     4
     1     3     1     3     1     3
     2     4     2     4     2     4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM