在matlab中从3个3D数组创建3D矢量数组

时间:2013-06-15 19:54:55

标签: matlab multidimensional-array matrix

假设我有三个大小为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

<=> [[(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中指定并执行此操作?

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

P.S:我还希望这种表示具有像梯度这样的计算能力?那可能吗 ?

1 个答案:

答案 0 :(得分: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从单元格数组中获取矩阵,并使用重塑形式将它们放入正确的维度。查看matlab文档:

doc cell2mat
doc reshape