import numpy as np
前言:
如果你厌倦阅读,请跳过序言,因为你已经知道了.
我最近在调试时遇到了问题.我写了’A = B = C = np.zeros([3,3]),我认为我刚刚定义了三个新的矩阵.我所做的事实上是不同的.我定义了一个新的矩阵(用零填充)和三个标签,每个标签都指向同一个矩阵.让我用以下示例说明:
>>> a = b = [0,0]
>>> a
[0,0]
>>> b
[0,0]
>>> # All good so far.
>>> a[0] = 1
>>> a
[1,0]
>>> # Nothing short of what one would expect...
>>> b
[1,0]
>>> # ... but since 'b' is assigned tot he same tuple, it changes as well.
问题:
好.现在我知道这没问题吧?当然我可以写:
A = np.zeros([3,3])
B = np.zeros([3,3])
C = np.zeros([3,3])
一切正常吗?这是对的,但我同样可以写:
A, B, C = np.zeros([3,3,3])
我认为第二个选项以更有效的方式使用内存,因为它定义了一个3x3x3张量,然后为每个层分别标记了A,B和C三个,而不是三个独立的矩阵,它们之间有可能的内存位.
您认为哪一个更好?
解决方法:
最重要的是,它闻起来像是过早优化.如果我们谈论的是少数几个矩阵,那么无论如何都无关紧要.如果我们正在谈论大量的矩阵,你就不太可能使用解包.
话虽如此,第二个选项涉及创建更大的底层存储,而第一个选项创建三个单独的存储.如果所有三个矩阵共享相同的生命周期,前者会更有效.后者更具可读性,并允许释放单个矩阵的内存.如果这种优化对你很重要,请测量.
标签:python,numpy,matrix,memory,memory-management
来源: https://codeday.me/bug/20190825/1720863.html