[英]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矩陣,並且不知道如何制作一個數組,如果有幫助的話。
參考文獻:
以下代碼將線性索引構建為兩個部分的總和:
將此索引應用於原始矩陣會產生所需的結果。
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.