一、起因
这个表达式的结果很有趣,起因是在看DIC代码时有一行的结果有点奇怪,如图1所示:
图1 等式右边reshape之后的结果是列向量,最终输出f的结果却是行向量
二、理论解释
理解这个赋值表达式结果的前提是以下几点:
1、A(:)表示赋值表达式结果的维度取决于左值的维度,即赋值后A的维度(大小)不变。
2、赋值过程是依次按列取B中元素对A进行填充,赋值效果等效为A=B(:),即相当于把B当作一个列向量填充到A中去。
3、特殊情况:当A不确定维度大小时,即A之前未被赋值过。此时会出现两种情况:
(1)B如果为矩阵(非向量形式),赋值会报错:左侧与右侧格式不兼容。
(2)B如果为向量(行向量或列向量),赋值成功,赋值结果必为行向量(可能跟Matlab默认向量为行向量有关)。
三、实验演示
图2演示了上述解释的1、2(常规情况),图3演示了上述解释的3(特殊情况)。