谁能解释一下为什么示例 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
示例 B
vec = [0 2 3 0 5 3] %1 x 6
newvec(vec == 0) = 1 %produces a 1 x 4 vector
最佳答案
如果在您调用第二行时 newvec
不存在,MATLAB 只会将其变大以容纳您设置为 1
的索引。
你实际上在做的是:
newvec([1 4 6]) = 1;
或
newvec([1 4]) = 1;
类似地,如果 vec
实际上是一个 2D/3D 等矩阵,newvec
将以 1 x N
的形式出现,其中 N 是任意的最高索引号,不保留原矩阵的形状。
因此,在这些情况下,您需要:
1) 首先将newvec
预分配为vec
的大小。
2) 改为执行 newvec = (vec==0)
关于matlab - 索引到向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24203618/