matlab用重复项展开矩阵

matlab用重复项展开矩阵,matlab,matrix,Matlab,Matrix,我想把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。2D情况 您可以使用kron: kron(A, ones(N,N)) 或使用索引: A(ceil(1/N:1/N:end), ce

我想把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。

2D情况 您可以使用
kron

kron(A, ones(N,N))
或使用索引:

A(ceil(1/N:1/N:end), ceil(1/N:1/N:end))
三维案例
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
”值,例如
N1
N2
N3

A(ceil(1/N1:1/N1:end), ceil(1/N2:1/N2:end), ceil(1/N3:1/N3:end))
2D案例 您可以使用
kron

kron(A, ones(N,N))
或使用索引:

A(ceil(1/N:1/N:end), ceil(1/N:1/N:end))
三维案例
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
”值,例如
N1
N2
N3

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

如果我的矩阵是3D的呢?我是一片一片地做吗?请看编辑后的答案。我假设您在第三个DIM中也扩展了
N
,非常感谢。我还可以问另一个问题:假设我对扩展矩阵做了一些运算,然后我想通过对相同的旧块中的条目求和,将其映射回原始维度。有没有一种有效的方法可以做到这一点?最简单的方法是使用图像处理工具箱。另一种方法是使用包含整数的辅助“标签”矩阵跟踪映射,然后将这些标签用作第一个参数。这可能更快,但需要为标签变量提供额外的内存。尝试一下,如果需要的话,发布一个新问题needed@NematollahZarmehi-根据您所做的工作,某些操作的时间顺序会有所不同。你能真正衡量的唯一方法就是对这种情况进行计时,就像你在另一篇文章中所做的那样。在我做过基准测试的一篇文章中,由于JIT编译器的启动,
for
循环是最具时间效率的解决方案,尽管
for
循环在MATLAB中自然不受欢迎。有关更多详细信息,请参阅本文:如果我的矩阵是3D的,该怎么办?我是一片一片地做吗?请看编辑后的答案。我假设您在第三个DIM中也扩展了
N
,非常感谢。我还可以问另一个问题:假设我对扩展矩阵做了一些运算,然后我想通过对相同的旧块中的条目求和,将其映射回原始维度。有没有一种有效的方法可以做到这一点?最简单的方法是使用图像处理工具箱。另一种方法是使用包含整数的辅助“标签”矩阵跟踪映射,然后将这些标签用作第一个参数。这可能更快,但需要为标签变量提供额外的内存。尝试一下,如果需要的话,发布一个新问题needed@NematollahZarmehi-根据您所做的工作,某些操作的时间顺序会有所不同。你能真正衡量的唯一方法就是对这种情况进行计时,就像你在另一篇文章中所做的那样。在我做过基准测试的一篇文章中,由于JIT编译器的启动,
for
循环是最具时间效率的解决方案,尽管
for
循环在MATLAB中自然不受欢迎。有关更多详细信息,请参阅本文:如果是3D矩阵,您希望发生什么?将数字增加一个系数
N^2
N^3
?我希望在3D中有N^3。这就像人为地将分辨率提高N倍。如果是3D矩阵,你希望发生什么?将数字增加一个系数
N^2
N^3
?我希望在3D中有N^3。这就像人为地将分辨率提高N倍。