Расчет между 2 векторами, где один равен 4d, а другой - 1d - PullRequest
0 голосов
/ 28 мая 2019

Я использую Matlab 2018b. Одна проблема возникла, когда я работаю с 2 векторами. Один имеет форму 4d, а другой - форму 1d. Я хотел бы вычесть значение вектора из значений другого вектора.

Идея:

Мне нужно запустить цикл для вектора A и вектора B. Внутри цикла я получу значение вектора A и вычту значение соответствующего индекса из B

Но я хотел бы решить проблему более MATLAB, а не процедурным способом. Можете ли вы направить меня для этого?

Пример:

A=[val(:,:,1,1)
      = 0.67
    val(:,:,2,1)
        =0.55
   val(:,:,3,1)
        =0.12
   val(:,:,1,2)
      = 0.12
    val(:,:,2,2)
        =0.50
    val(:,:,3,2)
        =0.11
]
B=[1
    0]

Операция будет такой:

Result=[
            val(:,:,1,1) =0.67-1
            val(:,:,2,1) =0.55-1
            val(:,:,3,1) =0.12-1
            val(:,:,1,2) =0.12-0
            val(:,:,2,2) =0.5-0
            val(:,:,3,2) =0.11-0
]

спасибо,

1 Ответ

1 голос
/ 28 мая 2019

Чтобы избежать использования permute, вы можете использовать два трюка:

  • Неявное расширение
  • Синглтон размерность

Если вы хотите вычесть 1D матрицу в 4D матрицу, проблема в том, что Matlab не знает, к какому измерению следует применить вычитание.

Но matlab позволяет вам создать матрицу с одноэлементным измерением, например, можно создать матрицу 1x1x1x2.

Вот пример:

% Creation of the 4D matrix
A = rand(3,4,5,2);
% Creation of another 4D matrix but with 3 singleton dimension
B = [1,0];
B = reshape(B,1,1,1,2);
%                   ↑
%              4th dimension

%Now matlab know that the substraction should be applied on the 4th dimension.
X = A-B;

Другой пример:

% Creation of the 4D matrix
A = rand(3,4,2,5);
% Creation of another 4D matrix but with 2 singleton dimension
B = [1,0];
B = reshape(B,1,1,2); %could also be written reshape(B,1,1,2,1)
%                 ↑
%             3th dimension

%Now matlab know that the substraction should be applied on the 3th dimension.
X = A-B;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...