我在Matlab中遇到了一些意外行为,这些行为在执行向量化分配时无法理解:
>> q=4;
>> q(q==[1,3,4,5,7,8])
The logical indices contain a true value outside of the array bounds.
>> q(q==[1,3,4,5,7,8])=1
q =
4 0 1
为什么该命令会q(q==[1,3,4,5,7,8])
导致错误,但该命令仍q(q==[1,3,4,5,7,8])=1
有效?以及它如何4 0 1
成为输出?
q(i)
和之间的区别在于,q(i)=a
前者必须产生数组元素的值;如果i
超出范围,MATLAB选择给出错误而不是发明一个值(IMO的不错选择)。后者必须将一个值写入数组元素。如果i
超出范围,MATLAB将选择扩展数组,使其足够大以能够写入该位置(这也被证明是一个不错的选择,它很有用,并且在代码中广泛使用)。通过添加零来扩展数值数组。
在您的特定情况下,q==[1,3,4,5,7,8]
是逻辑数组[0,0,1,0,0,0]
。这意味着您正在尝试索引i=3
。由于q
只有一个值,因此索引3的读取超出范围,但是我们可以在此处写入。q
通过将零加到大小3,然后将值1写入第三个元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句