我无法理解我刚刚发现的Matlab的行为。这是代码:
ix = logical([1; 0; 1]);
value = [2; 2; 2];
newValue(ix) = value(ix)
输出
2 0 2
虽然我期待
2
0
2
我可以通过在我的代码之前添加newValue = nan(size(value))
来“纠正”它。但我想了解为什么 Matlab从列向量创建一行。
答案 0 :(得分:4)
它会执行此操作,因为当您使用索引创建数组时:a(1) = 2; a(2) = 3;
,Matlab(和Octave)会创建一行(a=[2, 3]
)。当您使用逻辑索引时,它使用此方法。在你的情况下,Matlab执行
newValue(1) = value(1);
newValue(3) = value(3);
但正如@Irreducible所说,你可以通过预先分配newValue来避免这种情况
您可以在不使用逻辑索引的情况下获得相同的结果:
ix = [1; 0; 1];
value = [2; 2; 2];
newValue = value.*ix;
答案 1 :(得分:3)
我不认为它与逻辑索引有任何关系。您可以使用
重现相同的行为ix=[1;2;3]
value = [2; 2; 2];
newValue(ix)=value(ix)
newValue =
2 2 2
我假设默认格式(newValue)是一行,这就是你得到这个结果的原因(如你创建x = 1:3就可以看到)。
x=1:3;
x =
1 2 3
通过预先分配newValue,你可以克服这一点。
newValue=zeros(size(value));
或通过后期处理
newValue=newValue(:);