【问题标题】:matlab expand a matrix with duplicated entries [duplicate]matlab扩展具有重复条目的矩阵[重复]
【发布时间】:2014-08-27 02:11:44
【问题描述】:

我想将 3D 矩阵的大小扩大 N 倍。

以 N=3 的 2D 为例,

[1 2; 
 3 4]  

应该转化为

[1 1 1 2 2 2 ;
 1 1 1 2 2 2; 
 1 1 1 2 2 2; 
 3 3 3 4 4 4 ;
 3 3 3 4 4 4 ;
 3 3 3 4 4 4 ]

非常感谢。

虽然示例是 2D,但我真正需要的是 3D 矩阵的解决方案。函数 kron() 不适用于 3D。

【问题讨论】:

  • 如果是 3D 矩阵,你想发生什么?将数字增加一倍 N^2N^3?
  • 我想要 N^3 的 3D。这就像人为地将分辨率提高了 N 倍。

标签: matlab matrix


【解决方案1】:

二维案例

你可以使用kron:

kron(A, ones(N,N))

或者使用索引:

A(ceil(1/N:1/N:end), ceil(1/N:1/N:end))

3D案例

kron 不适用于 3D,但索引可以:

A = cat(3, [1 2; 3 4], [10 20; 30 40]);
A(ceil(1/N:1/N:end), ceil(1/N:1/N:end), ceil(1/N:1/N:end))

当然,您可以在每个维度上使用不同的“N”值,例如N1N2N3

A(ceil(1/N1:1/N1:end), ceil(1/N2:1/N2:end), ceil(1/N3:1/N3:end))

【讨论】:

  • 如果我的矩阵是 3D 怎么办?我要一片一片地做吗?
  • 请查看编辑后的答案。我假设你在第三个暗处也扩大了N
  • 非常感谢。我还可以问另一个问题:假设我对扩展矩阵进行了一些操作,然后我想通过对相同旧块中的条目求和来将其映射回原始维度。有没有有效的方法?
  • @nos 最简单的方法是使用图像处理工具箱中的blockproc。另一种方法是使用包含整数的辅助“标签”矩阵来跟踪映射,然后使用accumarray 将这些标签作为第一个参数。这可能会更快,但需要额外的内存来存储标签变量。试一试,如果需要,可以发布一个新问题
  • @NematollahZarmehi - 某些操作顺序在时间方面会有所不同,具体取决于您正在执行的什么。你能真正衡量的唯一方法是计时这种情况,就像你在其他帖子中所做的那样。在我进行基准测试的一篇文章中,由于 JIT 编译器的启动,for 循环是最省时的解决方案,尽管 for 循环在 MATLAB 中自然不受欢迎。有关详细信息,请参阅此帖子:stackoverflow.com/questions/23879888/…
猜你喜欢
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多