首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MATLAB中打印循环矩阵(toeplitz),其中每个输入都是维数m×m×3的三维矩阵?

如何在MATLAB中打印循环矩阵(toeplitz),其中每个输入都是维数m×m×3的三维矩阵?
EN

Stack Overflow用户
提问于 2019-07-06 01:33:16
回答 1查看 376关注 0票数 1

我知道如何使用toeplitz函数在MATLAB中创建一个一维向量的循环矩阵。但是,我正在尝试创建一个循环块。

例如,我有3个大小矩阵(2,2,3),其中第三维是R,G,B:下面是每个矩阵的行和列的样本值。第一个矩阵:

代码语言:javascript
复制
# 01  02
# 03  04

第二矩阵:

代码语言:javascript
复制
# 05  06
# 07  08

第三矩阵:

代码语言:javascript
复制
# 09  10
# 11  12

现在我要创建一个循环矩阵,如下所示

代码语言:javascript
复制
# 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矩阵,并且不知道如何在这里做一个数组,如果它有帮助的话。

参考文献:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-07 02:56:32

以下代码将线性索引作为两部分之和:

  • 描述块结构的“外部”模式(用repelem生成),以及
  • 具有重复块结构的“内部”模式(使用repmat)。

将此索引应用于原始矩阵会产生所需的结果。

代码语言:javascript
复制
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);

这给了我们

代码语言:javascript
复制
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

要更好地理解这是如何工作的,请参阅外部和内部索引模式(如果需要,请阅读有关线性索引的内容):

代码语言:javascript
复制
>> 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56910614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档