2024-05-19 01:13:06 发布
网友
我偶尔会使用numpy,并且我正在努力使操作矢量化。我正在阅读一些代码并试图理解以下内容的语义:
numpy
arr_1[:] = arr_2
在这种情况下
我知道在arr[:, 0]中,我们选择了数组的第一列,但是我对arr_1[:] = arr_2和arr_1 = arr_2之间的区别感到困惑
arr[:, 0]
arr_1 = arr_2
您的问题涉及基本Python语法和numpy特定细节的混合。在很多方面,列表是一样的,但并不完全一样。
arr[:, 0]返回arr(视图)的第一列,arr[:,0]=10将该列的值设置为10。
arr
arr[:,0]=10
arr[:]返回arr(alist[:]返回列表的副本)。arr[:]=arr2执行就地替换;将arr的值更改为arr2的值。arr2的值将根据需要广播和复制。
arr[:]
alist[:]
arr[:]=arr2
arr2
arr=arr2设置arr变量指向的对象。现在arr和arr2指向同一个东西(不管是数组、列表还是其他什么)。
arr=arr2
arr[...]=arr2在复制所有数据时也有效
arr[...]=arr2
在交互式会话中播放这些操作。尝试arr2形状的变体,以查看如何广播值。还要检查id(arr)以查看变量指向的对象。以及arr.__array_interface__来查看数组的数据缓冲区。这有助于区分视图和副本。
id(arr)
arr.__array_interface__
arr_1[:] = ...更改arr_1引用的现有列表对象的元素。
arr_1[:] = ...
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
使用arr_1[:] = arr_2是arr_1.__setitem__(slice(None, None), arr_2)的快捷方式。之所以使用而不是arr_1 = arr_2,是因为当您使用__setitem__时,您正在修改arr_1,而当您说arr_1 = arr_2时,您正在重新定义arr_1。因此,使用__setitem__将修改对arr_1对象的其他引用,而不仅仅是重新定义arr_1。
arr_1.__setitem__(slice(None, None), arr_2)
__setitem__
您的问题涉及基本Python语法和
numpy
特定细节的混合。在很多方面,列表是一样的,但并不完全一样。arr[:, 0]
返回arr
(视图)的第一列,arr[:,0]=10
将该列的值设置为10。arr[:]
返回arr
(alist[:]
返回列表的副本)。arr[:]=arr2
执行就地替换;将arr
的值更改为arr2
的值。arr2
的值将根据需要广播和复制。arr=arr2
设置arr
变量指向的对象。现在arr
和arr2
指向同一个东西(不管是数组、列表还是其他什么)。arr[...]=arr2
在复制所有数据时也有效在交互式会话中播放这些操作。尝试
arr2
形状的变体,以查看如何广播值。还要检查id(arr)
以查看变量指向的对象。以及arr.__array_interface__
来查看数组的数据缓冲区。这有助于区分视图和副本。arr_1[:] = ...
更改arr_1
引用的现有列表对象的元素。arr_1 = ...
使名称arr_1
引用不同的列表对象。主要区别在于,如果某些其他名称也引用了原始列表对象,会发生什么情况。如果是这样,那么前者更新两个名称所指的内容;而后者更改一个名称所指的内容,而另一个名称则保留原来的内容。
使用
arr_1[:] = arr_2
是arr_1.__setitem__(slice(None, None), arr_2)
的快捷方式。之所以使用而不是arr_1 = arr_2
,是因为当您使用__setitem__
时,您正在修改arr_1
,而当您说arr_1 = arr_2
时,您正在重新定义arr_1
。因此,使用__setitem__
将修改对arr_1
对象的其他引用,而不仅仅是重新定义arr_1
。相关问题 更多 >
编程相关推荐