从3d矩阵中提取数据

问题描述 投票:0回答:2

我有一个以下形式的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
matlab matrix multidimensional-array indexing slice
2个回答
2
投票

让我们剖析一下你在问什么:

第3行的矩阵

val(3, ?, ?)

和前两列

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

至于第三个索引,你想对所有“切片”做这个,所以你应该使用:,这意味着在这个上下文中的“all”:

val(3, 1:2, :)

作为explained by obchardon,这导致1×2×3数组,而你想要一个3×2(×1) - 所以我们需要重新排序维度:

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

1
投票

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

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

但当然它会产生1x2x3的矩阵,具有领先的单例维度。您可以使用以下命令删除单例维度:

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

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

extract = squeeze(val(3,1:2,:)).'
© www.soinside.com 2019 - 2024. All rights reserved.