Извлечение данных из 3d матрицы - PullRequest
0 голосов
/ 18 марта 2019

У меня есть 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 ]

2 голосов
/ 18 марта 2019

Давайте разберем то, что вы спрашиваете:

матрица с 3-й строкой

val(3, ?, ?)

и первые два столбца

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

Что касается индекса 3 rd , вы хотите сделать это для всех "кусочков", поэтому вы должны использовать :, что означает "все" в этом контексте:

val(3, 1:2, :)

Как объяснил obchardon , это приводит к массиву 1×2×3, тогда как вы хотели 3×2(×1) - поэтому нам нужно изменить порядок измерений:

out = permute( val(3, 1:2, :), [3,2,1] );
1 голос
/ 18 марта 2019

Вы можете использовать классический линейный индекс:

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

Но, конечно, он даст матрицу 1x2x3 с ведущим одноэлементным измерением.Вы можете удалить одноэлементное измерение с помощью:

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

En, наконец, транспонируйте свой результат для получения ожидаемого результата:

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