Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这种情况下,python中的内存分配是如何工作的?_Python_Arrays_Numpy_Memory Management - Fatal编程技术网

在这种情况下,python中的内存分配是如何工作的?

在这种情况下,python中的内存分配是如何工作的?,python,arrays,numpy,memory-management,Python,Arrays,Numpy,Memory Management,假设我有一个非常大的numpy数组a,我想把数值1加到数组的每个元素上。根据我目前所读到的: a += 1 是一种很好的方法,而不是: a = a + 1 因为在第二种情况下,在不同的内存插槽中创建一个新的数组a,而在第一种情况下,在相同的内存插槽中有效地替换了旧的数组 假设我要执行以下操作: a = 1-a 执行上述操作的内存有效方式是什么?您可以像这样就地执行: a *= -1 a += 1 直接使用subtractufunc比-操作符提供更多的控制。在这里,我们使用out参数将减

假设我有一个非常大的
numpy
数组
a
,我想把数值1加到数组的每个元素上。根据我目前所读到的:

a += 1 
是一种很好的方法,而不是:

a = a + 1
因为在第二种情况下,在不同的内存插槽中创建一个新的数组
a
,而在第一种情况下,在相同的内存插槽中有效地替换了旧的数组

假设我要执行以下操作:

a = 1-a

执行上述操作的内存有效方式是什么?

您可以像这样就地执行:

a *= -1
a += 1

直接使用
subtract
ufunc比
-
操作符提供更多的控制。在这里,我们使用
out
参数将减法的结果放回
a

@OlivierMelançon:
a
是一个NumPy数组。我们已经在用NumPy了。导入NumPy的成本是沉没成本,而不是使用此代码的额外成本。
a
是NumPy数组吗?您能添加类似于
a=numpy.array([1,2,3,4,5,6,7,8])的内容吗?这样我们就可以很容易地理解您的意思了。
add.at
的文档表明
a+=1
具有一定的缓冲-。详细信息隐藏在
numpy
code中。
numpy.subtract(1, a, out=a)