eng*_*ler 5 python arrays pointers 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
Run Code Online (Sandbox Code Playgroud)
造成:
[[ 0. 1. 2.]
[ 1. 2. 3.]
[ 2. 3. 4.]
[ 3. 4. 5.]]
[[ 0. 1. 2. 3.]
[ 1. 2. 3. 4.]
[ 2. 3. 4. 5.]]
Run Code Online (Sandbox Code Playgroud)
因此,无需处理转置数组,该数组中的值就会更新。
这怎么可能?
来自http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html:
\n\n\n\n\n不同的 ndarray 可以共享相同的数据,因此一个 ndarray 中所做的更改可能在另一个 ndarray 中可见。也就是说,一个 ndarray 可以是另一个 ndarray 的 \xe2\x80\x9cview\xe2\x80\x9d ,并且它引用的数据由 \xe2\x80\x9cbase\xe2\x80\x9d ndarray 处理。ndarray 还可以是 Python 字符串或实现缓冲区或数组接口的对象所拥有的内存的视图。
\n
当您执行 transpose() 时,这将返回原始 ndarray 的“视图”。它指向相同的内存缓冲区,但具有不同的索引方案:
\n\n\n\n\n内存段本质上是一维的,并且有许多不同的方案用于将 N 维数组的项目排列在一维块中。Numpy 很灵活,ndarray 对象可以适应任何跨步索引方案。
\n
要创建独立的 ndarray,可以使用 numpy.array() 运算符:
\n\nmyArrayTransposed = myArray.transpose().copy()\nRun Code Online (Sandbox Code Playgroud)\n