如何通过在 MATLAB 中模板化 2D 数组的列来创建 3D 数组?
Posted
技术标签:
【中文标题】如何通过在 MATLAB 中模板化 2D 数组的列来创建 3D 数组?【英文标题】:How can I create a 3D array by stenciling the columns of a 2D array in MATLAB? 【发布时间】:2014-04-10 12:23:32 【问题描述】:假设我有一个名为 A 的 2D 数组。我想创建一个名为 B 的 3D 数组,其“页面”是模板的选定列,逐列移动穿过 A。例如,B 的第一页可能是 A 的第 1、3、5 列,那么第二页可能是 A 的第 2、4、6 列,以此类推。
MATLAB 有什么有效的方法吗?
谢谢!
【问题讨论】:
【参考方案1】:我猜你正在寻找这个 -
%%// Given 2D array
A = randi(10,4,12)
t1 = reshape(A,size(A,1)*2,[]);
t2 = reshape(t1',size(A,2)/2,[],2); %%//'
B = permute(t2,[2 1 3]) %%// Output 3D array
输出 -
A =
5 10 3 5 6 8 4 3 8 10 8 7
10 8 3 7 6 10 9 2 7 8 8 5
10 4 7 8 6 4 5 4 1 1 3 7
7 7 6 6 1 10 5 8 9 4 3 3
B(:,:,1) =
5 3 6 4 8 8
10 3 6 9 7 8
10 7 6 5 1 3
7 6 1 5 9 3
B(:,:,2) =
10 5 8 3 10 7
8 7 10 2 8 5
4 8 4 4 1 7
7 6 10 8 4 3
当然,对于这种特殊情况,还有另一种直接的方法 -
B(:,:,1)=A(:,1:2:end);
B(:,:,2)=A(:,2:2:end);
【讨论】:
这是一个有趣的解决方案 - 比我目前的 for 循环更好。谢谢!以上是关于如何通过在 MATLAB 中模板化 2D 数组的列来创建 3D 数组?的主要内容,如果未能解决你的问题,请参考以下文章