Как получить все элементы матрицы, кроме ее первого элемента, в Matlab? - PullRequest
1 голос
/ 21 сентября 2019

Чтобы найти вывод следующей формулы в Matlab, мне нужно получить все элементы матрицы (PDA в следующем коде), кроме первого элемента, без использования цикла.

Формула (цель): % EVec = (A11-B11).^2 - (A12-B12).^2 - .. - (Aij-Bij).^2

Пример:

A(:,:,1) = [1 2 3 4; 4 5 6 1]; 
A(:,:,2) = [0 5 4 3; 2 7 6 0];
A(:,:,3) = [1 2 3 9; 0 6 7 0];

B(:,:,1) = [4 0 3 4; 4 8 0 1];
B(:,:,2) = [0 5 6 1; 0 9 4 3];
B(:,:,3) = [2 0 3 5; 8 6 7 2];

PDA = (A-B).^2;
EVec = PDA(1,1,:) - sum(PDA(?, ?, :)); % The problem is sum(PDA(?, ?,:)).

Результат работы КПК:

PDA(:,:,1) =

     9     4     0     0
     0     9    36     0

                               % All of them except Val(1,1) = 9.
PDA(:,:,2) =

     0     0     4     4
     4     4     4     9

                               % All of them except Val(1,1) = 0.
PDA(:,:,3) =

     1     4     0    16
    64     0     0     4
                               % All of them except Val(1,1) = 1.

И моя проблема в выводе PDA(1,1,:) - sum(PDA(?, ?, :)), который долженбыть: 9-(4+0+0+0+0+9+36+0), 0-(0+4+4+4+4+4+9), 1-(4+0+16+64+0+0+4) = [-40, -29, -87].. К сожалению, это не так.

Как получить все элементы матрицы, кроме ее первого элемента в Matlab?

1 Ответ

2 голосов
/ 22 сентября 2019

Первый элемент минус сумма оставшихся элементов просто вдвое больше первого элемента минус сумма всех элементов, поэтому

>> squeeze(2*PDA(1,1,:) - sum(sum(PDA,1),2))
ans =
   -40
   -29
   -87

Или в более новых выпусках

>> squeeze(2*PDA(1,1,:) - sum(PDA,[1,2]))
ans =
   -40
   -29
   -87
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...