【问题标题】:Reshaping 3D array to 2D将 3D 阵列重塑为 2D
【发布时间】:2016-09-21 12:00:08
【问题描述】:

查看以下玩具示例:

m = 3;
n = 3;
Y = rand(m,n,2);

例如给我

y(:,:,1) =

0.8314    0.3993    0.6569
0.8034    0.5269    0.6280
0.0605    0.4168    0.2920

y(:,:,2) =

0.4317    0.1672    0.1981
0.0155    0.1062    0.4897
0.9841    0.3724    0.3395

现在当我使用重塑它时

reshape(Y,m*n,2)

它扰乱了秩序并给了我,

0.8314    0.4317
0.8034    0.0155
0.0605    0.9841
0.3993    0.1672
0.5269    0.1062
0.4168    0.3724
0.6569    0.1981
0.6280    0.4897
0.2920    0.3395

因为这里应该是第二行

0.3993    0.1672

这可以在重塑之前进行交叉检查

Y(1,1,:)
Y(1,2,:) 
etc. 

顺序改变。

PS:我有大量数据要输入神经网络,这会影响我的权重乘法方式。

【问题讨论】:

    标签: matlab reshape


    【解决方案1】:

    在此处添加permute,然后添加reshape,就像这样-

    reshape(permute(y,[2,1,3]),[],size(y,3))
    

    示例运行 -

    >> y
    y(:,:,1) =
           0.8314       0.3993       0.6569
           0.8034       0.5269        0.628
           0.0605       0.4168        0.292
    y(:,:,2) =
           0.4317       0.1672       0.1981
           0.0155       0.1062       0.4897
           0.9841       0.3724       0.3395
    >> reshape(permute(y,[2,1,3]),[],size(y,3))
    ans =
           0.8314       0.4317
           0.3993       0.1672
           0.6569       0.1981
           0.8034       0.0155
           0.5269       0.1062
            0.628       0.4897
           0.0605       0.9841
           0.4168       0.3724
            0.292       0.3395
    

    【讨论】:

    • 谢谢。它有效。但只是重塑应该保留顺序。似乎不合逻辑!我会接受答案
    • @Hima 如果您认为 MATLAB 遵循 col-major 索引,它看起来更合乎逻辑。所以,第二个元素是0.8034 而不是0.3993。我们需要permute 来交换前两个暗淡。这种重塑终于给了我们一个 2D 版本。
    • 好吧,那么 y(1,2,1) 也应该给出相同的结果,但事实并非如此。
    • @Hima 我迷路了,y(1,2,1) 应该和什么一样?
    • @Hima 如果建议的解决方案没有为您提供所需的 o/p,请考虑将其添加到问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2023-01-03
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    相关资源
    最近更新 更多