为何MATLAB中该赋值语句抛元素数量不匹配而非索引越界错误?
MATLAB 数组赋值的索引行为
执行以下MATLAB代码:
x = 1:7; x(1:8) = 1:9;
抛出的错误是:
Unable to perform assignment because the left and right sides have a different number of elements.
而非预期的索引越界错误:
Index exceeds the number of array elements. Index must not exceed 7.
这是因为MATLAB处理数组赋值时,会先尝试扩展左侧数组以匹配索引范围,再校验左右元素数量是否一致,而非先检查索引是否越界。
Python(NumPy)的数组赋值逻辑
Python遵循先计算右侧表达式、再处理左侧索引、最后执行赋值的顺序,示例代码如下:
import numpy as np x = np.arange(7) x[7] = np.arange(8)[8] # 可以尝试把索引[8]改成[7]再运行
注:当使用切片而非单个元素索引时,
0:7、0:6、0:999的效果等价(切片上限超过数组长度时,会自动截断到数组末尾,最终取到所有元素)
内容的提问来源于stack exchange,提问作者OverLordGoldDragon
相关产品推荐
相关产品推荐

