这个例子
关于为索引数组赋值的文档为那些天真的程序员展示了一个带有意外结果的示例。
>>> x = np.arange(0, 50, 10)
>>> x
array([ 0, 10, 20, 30, 40])
>>> x[np.array([1, 1, 3, 1])] += 1
>>> x
array([ 0, 11, 20, 31, 40])
文档说人们可以天真地期望数组的值x[1]+1
增加三倍,但实际上它被分配了x[1]
三倍。
问题
真正让我感到困惑的是,我所期望的是操作的x += 1
行为就像它在普通 Python 中所做的那样x = x + 1
,所以x
结果array([11, 11, 31, 11])
。如本例所示:
>>> x = np.arange(0, 50, 10)
>>> x
array([ 0, 10, 20, 30, 40])
>>> x = x[np.array([1, 1, 3, 1])] + 1
>>> x
array([11, 11, 31, 11])
问题
第一的:
原始示例中发生了什么?有人可以详细解释一下吗?
第二:
这是一个记录在案的行为,我同意。但我认为它应该像我描述的那样表现,因为从 Python 主义的角度来看是预期的。所以,仅仅因为我想被说服:是否有充分的理由让它表现得像“我预期的”行为一样?