Matlab:从k张量列表中创建一个(k+1)张量



假设你有一堆k张量,为了简单起见,我们设它们是2张量/矩阵:

 X = rand(5,5); Y = rand(5,5);

是否有一个习语将它们组合成一个3张量,其中第一个维度索引矩阵?一种方法是

P(1,:,:) = X;
P(2,:,:) = Y;

,现在p有要求的尺寸2x5x5。有更好的方法吗?例如,在numpy中可以简单地输入:

P = array((X,Y))

,但在matlab中输入P=[X Y]P=[X; Y]将分别得到10x55x10矩阵,而不是预期的2x5x5

使用cat命令

假设你有5个大小为(x,y,z)的矩阵,

A = rand(x,y,z); B = rand(x,y,z); C = rand(x,y,z); D = rand(x,y,z); E = rand(x,y,z);

连接的矩阵将是

M = cat(4, A, B, C, D, E);

其中4表示第四维。输出M的大小为(x,y,z,5)。在MATLAB中,每个矩阵A,B,...的大小为(x,y,z,1,1,...),即它们的第四维长度为1。


在连接之后,可能需要更改维度索引的顺序,以便第一个维度是新创建的维度。使用permute命令

N = permute(M, [4, 1, 2, 3]);

输出矩阵N的大小为(5,x,y,z)


编辑历史

  1. 将输入矩阵大小从(3,3,3)更改为(x,y,z),以便在串联和排列时清晰区分各个维度。
  2. 增加permute,以满足OP的尺寸索引要求。

一般来说,MATLAB中的单元格数组相当于Python列表(它们可以存储不同类型的对象),因此您可以编写:

%# combine
P = {X Y};     %# or: P = {X;Y};
%# access the elements
P{1}
P{2}

在这种情况下(相同大小和类型的矩阵),正如@rwong所示,沿着新的维度进行连接可能是一种方法…

相关内容

  • 没有找到相关文章

最新更新