【问题标题】:How to reshape a five dimensional matlab array to get a three dimensional array?如何重塑一个五维matlab数组以获得一个三维数组?
【发布时间】:2015-10-21 23:21:36
【问题描述】:

我有一个多维 Matlab 数组,它是使用 ndgrid 命令创建的变量通过操作创建的:

[Z,R,T,Es]=ndgrid(z,r,t,E)

其中 z=r=0,t 是时间值向量,E 是 size=[10,80] 的二维矩阵

我想将它重塑为 size=[10,80,length(t)] 的三维数组,其中向量 t 被复制为对应于 E 的每个 10*80 值的第三维矩阵值。

我该怎么做? - 因为我知道 reshape 函数具有填充新数组的特定顺序?

【问题讨论】:

  • 数组的当前大小是多少?
  • 顺序是linear indexing给出的顺序:先向下运行第一列,然后移动到第二列,...,然后移动到第二个第三维度切片,...

标签: matlab


【解决方案1】:

我认为您可以使用permuterepmat 实现此目的

为了方便,我假设t 是一个行向量。

octave:41> t
t =

   0.932698   0.658920   0.090389   0.314648   0.509211

octave:42> size(E)
ans =

    10   180

octave:43> P = repmat(permute(t,[3,1,2]), [size(E,1), size(E,2), 1]);
octave:44> size(P)
ans =

    10   180     5

octave:45> P(1:3,1:3, :)
ans =

ans(:,:,1) =

   0.93270   0.93270   0.93270
   0.93270   0.93270   0.93270
   0.93270   0.93270   0.93270

ans(:,:,2) =

   0.65892   0.65892   0.65892
   0.65892   0.65892   0.65892
   0.65892   0.65892   0.65892

ans(:,:,3) =

   0.090389   0.090389   0.090389
   0.090389   0.090389   0.090389
   0.090389   0.090389   0.090389

ans(:,:,4) =

   0.31465   0.31465   0.31465
   0.31465   0.31465   0.31465
   0.31465   0.31465   0.31465

ans(:,:,5) =

   0.50921   0.50921   0.50921
   0.50921   0.50921   0.50921
   0.50921   0.50921   0.50921

我不确定这是否正是您正在寻找的。但是E 中的值没有在任何地方表示,只是保留了维度,并且t 的值沿E 中每个元素的第三维度重复

注意:如果t 是一个cloumn 向量,它必须是permute(t, [2,3,1])

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2020-07-08
    • 2014-04-21
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多