【问题标题】:Creating an array of 3D vectors from 3 3D arrays in matlab在matlab中从3个3D数组创建一个3D向量数组
【发布时间】:2013-06-15 19:54:54
【问题描述】:

假设我有三个大小为 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 中指定并执行此操作?

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

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

【问题讨论】:

  • 那不是 Matlab 代码。目前尚不清楚您要说明什么。那些看起来像二维单元阵列 - 无效的。您对元胞数组{...} 或数值数组[...] 感兴趣吗?
  • 我不太确定书面格式中 3D 矩阵的表示,所以我用大括号来说明。很抱歉造成不愉快的混乱。我的意思是这些都是 类型的数值数组,而不是单元块。我将修改描述以解决此问题。非常感谢@horchler 指出这一点。

标签: matlab multidimensional-array matrix


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 2016-09-03
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多