熊猫:什么是观点?

Gus*_*ava 4 python arrays numpy pandas

请帮助我理解:view熊猫是什么意思.我知道如果我们改变某些东西,view我们总是在原始对象中进行更改.

但是对象和原始对象的视图具有不同id's的例子.这是否意味着它view是另一个参考原始对象的对象?机制是什么?

我试过但找不到解释.

import pandas as pd
import numpy as np

df = pd.DataFrame({'x': [1,2]})
print(df)
df_sub = df[0:1]
df_sub.x = -1
print(df_sub._is_view)               # True
print(id(df) == id(df_sub))          # False
print(np.shares_memory(df, df_sub))  # True
Run Code Online (Sandbox Code Playgroud)

MSe*_*ert 6

要了解View是什么,您必须知道数组是什么.数组不仅是您放入其中的"东西"(项目).它还需要(除其他之外)有关元素数量,数组形状以及如何解释元素的信息.

所以数组是一个至少包含这些属性的对象:

class Series:
    data    # A pointer to where your array is stored
    size    # The number of items in your array
    shape   # The shape of your array
    dtype   # How to interpret the array
Run Code Online (Sandbox Code Playgroud)

因此,当您创建一个视图时,会创建一个新的数组对象但是(这很重要)View的data指针指向原始数组.它可以是偏移但它仍指向属于原始数组的一个内存位置.但即使它与原始大小共享一些数据,形状,dtype(,...)可能已经改变,因此它需要一个新对象.这就是他们有不同的原因id.

把它想象成窗户.你有一个花园(阵列),你有几个窗口,每个窗口是一个不同的对象,但所有窗口都在同一个(你的)花园.好的,授予,通过一些切片操作,你会有更多类似escher的窗口,但隐喻总是缺少一些细节:-)

  • 可以将[stride`属性](https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html#internal-memory-layout-of-an-ndarray)添加到列表中太.NumPy数组的切片是一种常见的视图,它指向相同的底层数据但具有不同的步幅(可能是偏移量). (2认同)