Расчет между двумя векторами, один из которых равен 4d, а другой — 1d

Я использую Matlab 2018b. Одна проблема возникла, когда я работаю с двумя векторами. Один имеет форму 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
]

Спасибо,

Это довольно распространенная операция в MATLAB, поэтому ее несложно выполнить. «Секрет» заключается в реорганизации элементов таким образом, чтобы они были совместимы для нужной вам операции. Взгляните на reshape и permute. Поскольку ваша версия MATLAB достаточно новая, вам даже не нужно будет использовать bsxfun (дополнительную информацию вы можете найти в Интернете по запросу «неявное расширение»). Если вы все еще не можете решить проблему после прочтения документации, пожалуйста, ответьте на этот комментарий.

Dev-iL 28.05.2019 08:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы избежать использования 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;

Другие вопросы по теме