0

假设我有三个大小为 2x2x2 的 3D 数组

u =[[3 4][9 8];[1 2][3 4]]

v =[[5 4][8 5];[3 2][-1 4]]

w =[[1 4][9 0];[4 5][3 1]]

我想创建一个大小为 2x2x2 的单个 3d 数组,将它们存储为 3D 向量,其中元素派生自数组 u,v,w

V = [[(3,5,1)(4,4,4)][(9,8,9)(8,5,0)];[(1,3,4)(2,2,5 )][(3,-1,3)(4,4,1)]]

有没有办法在matlab中指定并执行此操作?

编辑:我更改了表示以避免对单元格数组产生任何混淆。它们都是数值数组。

PS:我还希望这种表示具有梯度等计算能力?那可能吗 ?

4

1 回答 1

3

你的意思是像这样的单元格数组吗?

u ={[3 4],[9 8];[1 2],[3 4]}
v ={[5 4],[8 5];[3 2],[-1 4]}
w ={[1 4],[9 0];[4 5],[3 1]} % (note the commas)

这样做会非常麻烦,使用普通的 matlab 3D 矩阵会更直接:

u = cat(3,[3 4; 9 8],[1 2; 3 4])
v = cat(3,[5 4; 8 5],[3 2; -1 4])
w = cat(3,[1 4; 9 0],[4 5; 3 1])

您可以使用 cat 命令简单地连接第四维,如下所示:

V = cat(4, u, v, w)

然后,您感兴趣的 3D 向量位于 V 的最后一维中,例如,您可以使用 (1,2,1) 获得向量

V(1,2,1,:)

或者

>> squeeze(V(1,2,1,:))

ans =

    4
    4
    4

如果你想得到一个 3x1 向量。

如果必须,您可以使用 cell2mat 从元胞数组中获取矩阵,并使用 reshape 使它们具有正确的维度。检查 matlab 文档以了解这些:

doc cell2mat
doc reshape
于 2013-06-15T20:15:23.070 回答