假设你有一堆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]
会分别给出10x5
和5x10
矩阵,而不是预期的2x5x5
。
答案 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)
。
修改历史记录
(3,3,3)
更改为(x,y,z)
,以便在连接和排列过程中清楚地区分每个维度。permute
,这是满足OP的维度索引要求所必需的。答案 1 :(得分:1)
通常,MATLAB中的单元格数组相当于Python列表(它们可以存储不同类型的对象),因此您可以编写:
%# combine
P = {X Y}; %# or: P = {X;Y};
%# access the elements
P{1}
P{2}
在这种情况下(相同大小和类型的矩阵),并且@rwong显示,沿着新维度连接可能是要走的路......