【问题标题】:Extracting data from 3d matrix从 3d 矩阵中提取数据
【发布时间】:2019-08-08 16:55:48
【问题描述】:

我有一个如下形式的 3d 矩阵:3x3x46

有没有一种简单的方法可以提取第三行和前两列的矩阵?

这里的例子是3x3x3我想提取

0.2710    0.5965
0.0280    0.3255
0.2285    0.4695

这是一个示例:

val(:,:,1) =

   -0.0492    0.6831    0.1291
   -0.4870    0.2893    0.2642
    0.2710    0.5965    0.8940


val(:,:,2) =

   -0.2316    1.4371    2.5806
   -2.4170    1.2168    6.4721
    0.0280    0.3255    0.0730


val(:,:,3) =

   -0.0881    0.9226    0.3146
   -1.0027    0.8638    1.0925
    0.2285    0.4695    0.6715

【问题讨论】:

    标签: matlab matrix multidimensional-array indexing slice


    【解决方案1】:

    让我们剖析你的问题:

    第三行的矩阵

    val(3, ?, ?)
    

    前两列

    val(3, 1:2, ?)  % or [1,2]
    

    至于第 3rd 索引,您想对所有“切片”执行此操作,因此您应该使用:,这意味着在此上下文中的“全部”:

    val(3, 1:2, :)
    

    作为explained by obchardon,这会产生一个1×2×3 数组,而您想要一个3×2(×1) - 所以我们需要重新排列维度:

    out = permute( val(3, 1:2, :), [3,2,1] );
    

    【讨论】:

    • 一步一步完美解释的答案:) 太棒了
    【解决方案2】:

    您可以使用经典的线性索引:

    extract = val(3,1:2,:)
    

    当然,它会生成一个 1x2x3 矩阵,具有前导单维。您可以使用以下方法删除单例维度:

    extract = squeeze(val(3,1:2,:))
    

    最后转置你的结果以获得预期的输出:

    extract = squeeze(val(3,1:2,:)).'
    

    【讨论】:

    • 而不是squeeze + .' 可以简单地使用permute
    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多