Python:当一个数组被转置时,numpy数组是否链接



目前我正在研究一个python脚本,它从文本文件中提取测量数据。我正在使用iPython Notebook和Python 2.7

现在我在使用 numpy 数组时遇到了一些奇怪的行为。我对此没有任何解释。

myArray = numpy.zeros((4,3))
myArrayTransposed = myArray.transpose()
for i in range(0,4):
    for j in range(0,3):
        myArray[i][j] = i+j
print myArray
print myArrayTransposed

导致:

[[ 0.  1.  2.]
 [ 1.  2.  3.]
 [ 2.  3.  4.]
 [ 3.  4.  5.]]
 [[ 0.  1.  2.  3.]
 [ 1.  2.  3.  4.]
 [ 2.  3.  4.  5.]]

因此,在不处理转置数组的情况下,此数组中的值将更新。

这怎么可能?

从 http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html:

不同的 ndarray 可以共享相同的数据,因此在一个 ndarray 中所做的更改可能在另一个 ndarray 中可见。也就是说,一个ndarray可以是另一个ndarray的"视图",它所引用的数据由"基本"ndarray处理。ndarray 也可以是 Python 字符串或实现缓冲区或数组接口的对象拥有的内存视图。

当你做一个转置()时,这会返回一个"视图"到原始的ndarray。它指向相同的内存缓冲区,但它具有不同的索引方案:

一段内存本质上是一维的,并且有许多不同的方案可以在一维块中排列 N 维数组的项目。Numpy 非常灵活,ndarray 对象可以适应任何跨步索引方案。

要创建一个独立的 ndarray,你可以使用 numpy.array() 运算符:

myArrayTransposed = myArray.transpose().copy()

最新更新