Matlab:从k-tens的列表中创建(k + 1)-tensor

时间:2011-08-07 03:39:41

标签: matlab multidimensional-array

假设你有一堆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

2 个答案:

答案 0 :(得分:4)

使用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指的是第4维。输出M的大小为(x,y,z,5)。在MATLAB中,每个矩阵A,B,...的大小为(x,y,z,1,1,...),即它们的第4维长度为1。


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

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

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


修改历史记录

  1. 将输入矩阵大小从(3,3,3)更改为(x,y,z),以便在连接和排列过程中清楚地区分每个维度。
  2. 添加了permute,这是满足OP的维度索引要求所必需的。

答案 1 :(得分:1)

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

%# combine
P = {X Y};     %# or: P = {X;Y};

%# access the elements
P{1}
P{2}

在这种情况下(相同大小和类型的矩阵),并且@rwong显示,沿着新维度连接可能是要走的路......