【问题标题】:How to get all elements of a matrix except its first element, in Matlab?如何在Matlab中获取除第一个元素之外的矩阵的所有元素?
【发布时间】:2020-01-22 05:49:11
【问题描述】:

要在 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的结果是:

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中如何获取矩阵除第一个元素外的所有元素?

【问题讨论】:

  • 所有元素的总和减去第一个元素:sum(A(:))-A(1)。但是你必须做一些稍微不同的事情,因为你不想在第三维上求和。
  • @Cris Luengo:不,我想要: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)。那么,如何在没有循环的情况下在 PDA(:,:,1) 等中获得 (4+0+0+0+0+9+36+0) ?
  • 请在问题中添加所需的确切输出
  • 我想我们说的是同一件事。除第一个元素外的所有元素的总和与减去第一个元素的所有元素的总和相同。

标签: matlab matrix


【解决方案1】:

第一个元素减去其余元素的总和正好是第一个元素减去所有元素总和的两倍,所以

>> 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多