在 numpy 中, 和 的区别,以下面两个代码为例:
在运行这两个段代码之前,我先试着判断两个代码最终输出的结果,结果第 2 段代码我判断错了,我判断的输出为: ,判断思路是——根据向量化运算,用a数组的元素和新的数组 的元素相加。但粗心的我在两个地方都搞错了,犯了两个低级错误——当 时,原来指向数组 的 在这里就已经发生改变,即现在指向数组 ,然后,我没注意到的 2 个地方是——虽然 所指向的数组改变了,但没注意到 和 这两个地方,误以为要打印的变量是 ; 而正确的结果应该是 ,因为要打印的是 变量,且 是指向数组 的。
知道真相的我尴尬症要犯了……
PS: 在numpy中叫原位运算符——它会把所有改变的值放在原来数组中的原来的位置,而不是重新创建或复制一个新的数据。以下面的代码为例:
在没有运行这段代码我的测算的打印结果是: ,这里我又错了,正确的结果应该是: ,很意外,因为在我看来,按照 Python 中列表的特性的话, 的数组是从 数组中截取 ,也就是 ,然后将 的第 1 个元素重新赋值为 ,那结果应该是 没毛病,可惜这是Python列表的特性,不是numpy数组的,又犯了一个思维错误~
这里面, 的运算和改变其实都是在 数组对应的位置进行的,它只是在 数组中创建了一个 ,所有的数组运算都在这个区域完成。可以看作是一个书架上各个独立的小格子,里面的书相当于数组的元素,当我们想把数组中的某段区域拿出来做运算时,就相当于我们需要拿取书架格子上的某一本或几本书来读或者修整;当改完后,就需要将这些元素重新放回数组原来的位置,即,我们在把某格子上的书拿出来后,无论是阅读,还是换为另外一本书放回格子原来的位置上。——一个不是很恰当的类比。
领取专属 10元无门槛券
私享最新 技术干货