索引到矢量

mHe*_*pMe 5 matlab

有人可以解释为什么在例子A中结果是1x6向量(这是有意义的并且是我所期待的)而在例B中结果是1x4向量?

在示例B中,如果我将newvec的大小预定义为1x6向量,则结果是正确的1x6向量.只是不了解发生了什么.

例A

vec = [0 2 3 0 5 0]     %1x6
newvec(vec == 0) = 1    %produces a 1 x 6 vector
Run Code Online (Sandbox Code Playgroud)

例B

vec = [0 2 3 0 5 3]     %1 x 6
newvec(vec == 0) = 1    %produces a 1 x 4 vector
Run Code Online (Sandbox Code Playgroud)

Nis*_*ant 3

编辑: 感谢丹指出错误。

vec == 0产生一个逻辑矩阵。现在,如果未定义 newvec 的大小 ,则将newvec(vec==0) =1始终创建一个新的行向量newvec。

以下步骤将决定其大小newvec

temp1 = logical_matrix(:);
trailing_zeros = number of zeros after the occurrence of last `true` value in temp1
size(newvec) = [1, numel(logical_matrix) - trailing_zeros] ;
Run Code Online (Sandbox Code Playgroud)

当您预定义 的大小newvec时,则newvec(v==0) = 1无法更改 的大小newvec,它只会分配给 的相应1索引。vec==0true

  • “将创建一个向量 newvec,其大小等于逻辑矩阵中 true(ones) 值的数量”不是 true,`newvec` 将是逻辑矩阵中最后一个 `true` 值的位置大小,不是“真”值的数量。 (3认同)
  • *”...其大小将等于逻辑矩阵中 true(ones) 值的数量,在本例中为 4”*,那么现在这不是真的,不是吗?因为示例A中`newvec`的大小是1×6,而原始`vec`中只有3个`true`。`newvec` 的大小取决于*最后一个* `true` 的位置,这很奇怪。 (2认同)