如何将此 2D 数组重塑为 4D 数组?
How can I reshape this 2D array to a 4D array?
我有一个二维层流火焰速度数组,形式为:
T1 P1 phi1 EGR1 S
T1 P2 phi1 EGR1 S
.
.
.
T1 P12 phi1 EGR1 S
T1 P13 phi1 EGR1 S
T1 P1 phi2 EGR1 S
T1 P2 phi2 EGR1 S
.
.
.
T1 P12 phi2 EGR1 S
T1 P13 phi2 EGR1 S
.
.
.
.
.
.
T28 P1 phi5 EGR1 S
T28 P2 phi5 EGR1 S
.
.
.
T28 P12 phi5 EGR1 S
T28 P13 phi5 EGR1 S
其中有28种不同的初始温度(T1 - T28),13种不同的初始压力(P1 - P13)和5种不同的燃料空气比(phi1 - phi5)。 EGR 水平不变 (EGR1
),然后得到的火焰速度列为 S
.
所以这是一个大小为 (1820,5) 的二维数组。我想将其转换为 MATLAB 中的 4D 数组,格式为:A(5,5,13,28)。所以每一页都是特定压力和温度下的 5 个燃料空气比,即 5x5。下一页(第 3 个维度)将压力更改为 P2
,但保持温度不变。然后最后,第4维度增加了初始温度。
我熟悉 reshape
和 permute
函数,但似乎无法达到我想要的效果。任何人都可以伸出援手吗?
这应该会给你你想要的结果,假设 data2D
是你在你的例子中给出的形式:
data4D = permute(reshape(data2D, [13 5 28 5]), [2 4 1 3]);
首先,请注意,在二维数据中,第二列 (P
) 循环最快,其次是第三列 (phi
),然后是第一列 (T
) .这就是我在 reshape
步骤中选择 [13 5 28 5]
的原因,这会产生一个 4D 矩阵,其中 P
在第一维上变化,phi
在第二个维度上变化,T
在第三个,你的行数据在第四个。
permute
步骤然后简单地按 [2 4 1 3]
的顺序重新组织维度,这样 phi
在第一个维度上变化,您的行数据在第二个维度上变化,P
第三个,T
第四个。
我有一个二维层流火焰速度数组,形式为:
T1 P1 phi1 EGR1 S
T1 P2 phi1 EGR1 S
.
.
.
T1 P12 phi1 EGR1 S
T1 P13 phi1 EGR1 S
T1 P1 phi2 EGR1 S
T1 P2 phi2 EGR1 S
.
.
.
T1 P12 phi2 EGR1 S
T1 P13 phi2 EGR1 S
.
.
.
.
.
.
T28 P1 phi5 EGR1 S
T28 P2 phi5 EGR1 S
.
.
.
T28 P12 phi5 EGR1 S
T28 P13 phi5 EGR1 S
其中有28种不同的初始温度(T1 - T28),13种不同的初始压力(P1 - P13)和5种不同的燃料空气比(phi1 - phi5)。 EGR 水平不变 (EGR1
),然后得到的火焰速度列为 S
.
所以这是一个大小为 (1820,5) 的二维数组。我想将其转换为 MATLAB 中的 4D 数组,格式为:A(5,5,13,28)。所以每一页都是特定压力和温度下的 5 个燃料空气比,即 5x5。下一页(第 3 个维度)将压力更改为 P2
,但保持温度不变。然后最后,第4维度增加了初始温度。
我熟悉 reshape
和 permute
函数,但似乎无法达到我想要的效果。任何人都可以伸出援手吗?
这应该会给你你想要的结果,假设 data2D
是你在你的例子中给出的形式:
data4D = permute(reshape(data2D, [13 5 28 5]), [2 4 1 3]);
首先,请注意,在二维数据中,第二列 (P
) 循环最快,其次是第三列 (phi
),然后是第一列 (T
) .这就是我在 reshape
步骤中选择 [13 5 28 5]
的原因,这会产生一个 4D 矩阵,其中 P
在第一维上变化,phi
在第二个维度上变化,T
在第三个,你的行数据在第四个。
permute
步骤然后简单地按 [2 4 1 3]
的顺序重新组织维度,这样 phi
在第一个维度上变化,您的行数据在第二个维度上变化,P
第三个,T
第四个。