Уменьшить трехмерный массив до вектора значащих чисел - PullRequest
0 голосов
/ 11 октября 2018

Привет, у меня есть трехмерный массив в Matlab, что-то вроде <10 x 10 x 100>, и я хотел бы уменьшить этот массив до вектора значащих чисел.Например, я хотел бы взять каждую матрицу (рисунок), разделить ее пополам по столбцам, вычислить сумму (слева) -сумму (справа) и вернуть этот вектор <1 x 100> обратно.К сожалению, я не могу понять или узнать, как это сделать.Является ли это возможным?И как мне этого добиться?

Большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 11 октября 2018

Вот одна строка с заданной матрицей A:

result = -squeeze(diff(sum(reshape(A, [50 2 100]), 1), 1, 2)).';

Как это работает:

Сначала преобразовать данные в 50-матрица 2 на 100, где значения в левой половине каждой матрицы находятся в столбце 1, а значения в правой половине каждой матрицы - в столбце 2. Затем примените sum вниз к каждому столбцу, чтобыполучить матрицу 1 на 2 на 100.Затем вы можете взять разницу между столбцами с помощью diff, хотя это вычитает левый столбец справа, поэтому вы должны добавить минус, чтобы отменить результат.Результирующая матрица 1 на 1 на 100 может быть свернута в вектор-столбец 100 на 1 с squeeze, и это может быть транспонировано в вектор строки,В качестве альтернативы вы можете использовать другой reshape вместо squeeze и транспонировать:

result = -reshape(diff(sum(reshape(A, [50 2 100]), 1), 1, 2), [1 100]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...