在numpy中赋值的arr [:]是什么意思?

Ale*_*off 7 python arrays numpy

我偶尔会使用numpy,而我正试图变得更聪明,我如何对操作进行矢量化.我正在阅读一些代码并尝试理解以下语义:

arr_1[:] = arr_2
Run Code Online (Sandbox Code Playgroud)

在这种情况下,

据我所知,arr[:, 0]我们正在选择阵列的第一列,但我困惑的区别是什么之间arr_1[:] = arr_2arr_1 = arr_2

hpa*_*ulj 9

您的问题涉及基本Python语法和numpy特定细节的混合。在很多方面,列表是相同的,但不完全相同。

arr[:, 0]返回arr(视图)的第一列arr[:,0]=10,将该列的值设置为10。

arr[:]返回arralist[:]返回列表的副本)。 arr[:]=arr2执行就地更换;将的值更改arr为的值arr2。的值arr2将根据需要广播和复制。

arr=arr2设置arr变量指向的对象。现在arrarr2指向同一件事(无论是数组,列表还是其他)。

arr[...]=arr2 复制所有数据时也可以使用

在交互式会话中进行这些操作。尝试改变形状,arr2以了解如何传播价值。还要检查id(arr)以查看变量指向的对象。并arr.__array_interface__查看数组的数据缓冲区。这可以帮助您将视图与副本区分开。


Amb*_*ber 7

arr_1[:] = ...更改引用的现有列表对象的元素arr_1.

arr_1 = ...使名称arr_1引用不同的列表对象.

主要区别在于,如果某些其他名称也引用了原始列表对象,会发生什么.如果是这种情况,那么前者会更新两个名称所指的东西; 而后者改变一个名称所指的是什么,而另一个名称指的是原始的东西.

>>> a = [0]
>>> b = a
>>> a[:] = [1]
>>> print(b)
[1]                 <--- note, change reflected by a and b
>>> a = [2]
>>> print(b)
[1]                 <--- but now a points at something else, so no change to b
Run Code Online (Sandbox Code Playgroud)