如何通过在 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 数组?的主要内容,如果未能解决你的问题,请参考以下文章

使用函数式编程平均2D数组中的列

如何使用CUDA并行化嵌套for循环以在2D数组上执行计算

matlab中的length表示啥?应该如何使用?

matlab里如何把一个矩阵相同列向量的列序号依次输出出来?

在C#datagrid中显示MATLAB数组

matlab中如何计算二维数组大小?