从3d矩阵中提取数据

时间:2019-03-18 10:38:52

标签: matlab matrix multidimensional-array indexing slice

我得到了以下形式的3d矩阵:3x3x46

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

对于这里的示例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

2 个答案:

答案 0 :(得分:2)

我们来剖析您的要求:

  

第3行的矩阵

val(3, ?, ?)
  

以及前两列

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

对于3 rd 索引,您想对所有“切片”执行此操作,因此您应使用:,在此情况下表示“全部”:

val(3, 1:2, :)

explained by obchardon一样,这会产生一个1×2×3数组,而您需要一个3×2(×1)-因此我们需要重新排列尺寸:

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

答案 1 :(得分:1)

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

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

但是,它当然会产生一个1x2x3的矩阵,具有领先的单例尺寸。您可以使用以下方法删除单例尺寸:

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

En最终对结果进行转置以获得预期的输出:

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