假设我有三个大小为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:我还希望这种表示具有像梯度这样的计算能力?那可能吗 ?
答案 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