Как получить вектор из элементов по фиксированному размеру в трехмерном массиве? - PullRequest
2 голосов
/ 11 июня 2019

У меня есть 3D-массив в MATLAB, например:

val(:,:,1) =
    1.1461    2.3993
    2.3993   15.4036

val(:,:,2) =
    1.0041    0.8106
    0.8106   10.6503

val(:,:,3) =
    1.0001    0.9895
    0.9895    3.0384

val(:,:,4) =
    1.0024    0.9936
    0.9936    2.0169

Это массив 2 x 2 x 600.Я хочу второй элемент каждой из 600 "матриц".Есть ли простой способ извлечь их из MATLAB?

Я бы хотел получить следующий вывод:

output = [ 2.3993; 0.8106; 0.9895; 0.9936 ];

До сих пор моя попытка была следующей:

val(1, 2, :)

Но это возвращает:

ans(:,:,1) =
    2.3993

ans(:,:,2) =
    0.8106

ans(:,:,3) =
    0.9895

ans(:,:,4) =
    0.9936

Мне нужны эти значения как вектор.

1 Ответ

1 голос
/ 11 июня 2019

Ваш подход к val(1, 2, :) правильный. Тем не менее, размер выпускаемой продукции составляет 1 x 1 x 4. То, что вы хотите сделать, это удалить (ненужные) измерения длины 1. Для этого предназначена функция squeeze.

Имея 3-мерный массив val, такой как ваш и фиксированные индексы x, y для первого и второго измерений, мы просто окружаем вашу команду squeeze:

% 3-dimensional array
val = reshape(1:36, 3, 3, 4)

% Squeezed output for fixed x, y in dimensions 1 and 2
x = 1;
y = 2;
out3d = squeeze(val(x, y, :))

Вывод следующий:

val =

ans(:,:,1) =
   1   4   7
   2   5   8
   3   6   9

ans(:,:,2) =
   10   13   16
   11   14   17
   12   15   18

ans(:,:,3) =
   19   22   25
   20   23   26
   21   24   27

ans(:,:,4) =
   28   31   34
   29   32   35
   30   33   36

out3d =
    4
   13
   22
   31

Это работает для произвольных измерений и количества индексов.

4-мерный массив с двумя фиксированными индексами даст 2-мерный вывод:

% 4-dimensional array
val = reshape(1:108, 3, 3, 4, 3)

% Squeezed output for fixed x, y in dimensions 1, 2
x = 1;
y = 2;
out4d = squeeze(val(x, y, :, :))

Выход:

val = (omitted here)

out4d =
     4    40    76
    13    49    85
    22    58    94
    31    67   103

4-мерный массив с тремя фиксированными индексами снова выдаст 1-мерный вывод:

% 4-dimensional array
val = reshape(1:108, 3, 3, 4, 3)

% Squeezed output for fixed x, y, z in dimensions 1, 2, 3
x = 1;
y = 2;
z = 1;
out4d = squeeze(val(x, y, z, :))

Выход:

val = (omitted here)

out4d =
    4
   40
   76

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...