首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫:什么是风景?

熊猫:什么是风景?
EN

Stack Overflow用户
提问于 2017-01-20 13:50:32
回答 1查看 1.5K关注 0票数 7

请帮助我理解:潘达斯中的view是什么?我知道,如果我们在view中更改了一些东西,那么我们总是会对原始对象进行更改。

但是一个对象的视图和原始对象的视图有不同的id's。这是否意味着view是另一个引用原始对象的对象?机制是什么?

我试过了,但找不到解释。

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-20 14:58:59

要理解视图是什么,您必须知道数组是什么。数组不仅仅是你放进去的“东西”(项目)。它还需要(除其他外)关于元素的数量、数组的形状以及如何解释元素的信息。

因此,数组至少是一个包含以下属性的对象:

代码语言:javascript
运行
复制
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

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

把它想象成窗户。您有一个花园(数组),并且有几个窗口,每个窗口都是不同的对象,但是它们都可以看到同一个花园。好的,当然,对于一些切片操作,您可能会有更多的埃舍尔式窗口,但是隐喻总是缺少一些细节:-)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41765230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档