精华内容
下载资源
问答
  • 索引节点采用了多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。 ... [/quote] ...
    [quote]
    ...
    ext2文件系统采用的索引节点(inode):
    索引节点采用了多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。
    ...
    [/quote]
    根据[url]http://linux.chinaunix.net/techdoc/beginner/2007/12/06/973887.shtml[/url]的讲解,我制作了一张图片,更直观的描述一下索引结构怎样决定了单个文件的存储大小:
    展开全文
  • 作者:前Google工程师,5万人订阅《数据结构和算法之美》专栏作者。 希望通过我加速你的技术、职场进步。 到目前为止,我的公众号里的读者,都是我的专栏《数据结构和算法之美》的订阅者。所以,今天要讲的内容,跟...

    关注我的微信公众号:小争哥,获取更多、更新的技术、非技术分享。
    作者:前Google工程师,5万人订阅《数据结构和算法之美》专栏作者。
    希望通过我加速你的技术、职场进步。

    到目前为止,我的公众号里的读者,都是我的专栏《数据结构和算法之美》的订阅者。所以,今天要讲的内容,跟专栏里的某个知识点有关。

    我在专栏里面,有讲到,链表经常和散列表在一块使用,还讲到Redis中的有序集合,是通过散列表和跳表,两种数据结构来实现的。(详细内容请参看《数据结构和算法专栏》的第20讲)。

    关于这两个问题,有小伙伴有一些疑问,搞不清楚两个不同的数据结构,是如何配合工作的?我这里就小伙伴们的疑问,抽象成一些共性的话题,来讲一下,什么是"多重索引结构"?

    什么是索引?

    索引这个话题,我们专栏的第50讲中有讲到。简单点讲,在海量数据中,查找某个数据的时候,索引作为一个辅助结构,可以起到快速定位到数据的作用。

    索引可以说无处不在,在很多系统设计中,都有用到。比如MySQL中的B+树索引,搜索引擎中的倒排索引、Redis中用Key构建的散列表索引。

    什么是多重索引?

    所谓多重索引,就是指,对同一个数据集合(或者说是对象集合),我们对其构建多个不同的索引。你可能会说,一个索引不就足够定位数据了吗?为什么还要多重索引呢?

    首先,我们要明确一个知识点。有了这个知识点,这个问题你就好理解。

    我们这里所说的“数据”,以及数据结构和算法之美专栏中提到的“数据”,并不是简单的1、2、3...这样的数字。而是一个包含很多字段的对象(Object),举个例子,比如下面表示学生的Student对象:

     Class Student {
       public String ID; // 学号
       public int score; // 成绩,假设成绩不包含小数点
    } 
    复制代码

    在真实的软件开发中,我们是拿对象的“key”,来构建数据结构。key之外的数据,我们叫做卫星数据,这部分数据不参与构建数据结构。怎么理解这句话呢?

    还是拿刚刚学生对象这个例子来讲解。如果我们的需求是,通过学号,能快速的查找某个学生的信息(比如成绩)。那我们就把“ID”作为key,构建散列表。构建成的散列表结构如下所示:

    从图中,你可以看出,散列表实际上只是一个索引结构,真实的数据(学生对象)并没有保存在散列表中,散列表通过一个指针(也就是学生对象的内存地址),来查找到对象。

    现在,如果我们的需求变了,不但需要通过学号来快速的查找学生的信息(比如成绩),还需要通过成绩区间(比如查询大于60分小于70分的有哪些同学),快速的查找学生信息列表(比如学生的学号),那又该怎么办呢?

    显然,基于学号构建的散列表,这样一个索引,是无法实现两种快速查找需求的。怎么办呢?我想,你应该已经能想到解决办法了吧,那就是,我们可以再把score作为key,再构建一个索引。

    跳表这种数据结构,我们在专栏里有讲过,我们可以基于学生信息中的成绩字段,构建成跳表这种索引结构。你如果忘记了,可以去再去回顾一下那节课的内容。

    现在,基于ID和Score,我们构建了两个索引(多重索引),就如下图所示,通过散列表,我们可以快速的通过学号定位学生对象,通过跳表,我们可以快速的查找,属于某个成绩区间的学生有哪些。

    这里本该添加一张图的,我手画了一下,发现太乱了,没法看,抽空找个绘图软件来画。 不过,这里,我需要强调一点,也是很多小伙伴,有疑惑的地方。数据(学生对象)在内存中,永远只有一份的,索引中存储的是这些数据的内存地址(表现在代码中就是指针或者引用)。

    转载于:https://juejin.im/post/5c88acaaf265da2d8e71270e

    展开全文
  • 分层/多级索引是非常令人兴奋的,因为它为一些相当复杂的数据分析和操作打开了大门,特别是对于处理高维数据。实际上,它使您能够在较低维的数据结构...一、创建多重索引(分层索引)对象 多索引对象是标准索引对象的

    分层/多级索引是非常令人兴奋的,因为它为一些相当复杂的数据分析和操作打开了大门,特别是对于处理高维数据。实际上,它使您能够在较低维的数据结构(如Series (1d)和DataFrame (2d))中存储和操作具有任意维数的数据。
    在本节中,我们将展示“分层”索引的确切含义,以及它如何与上面和前面几节中描述的所有panda索引功能集成。稍后,在讨论对数据进行分组、旋转和重塑时,我们将展示一些重要的应用程序,以说明它如何帮助结构化数据以便进行分析。

    一、创建多重索引(分层索引)对象

    多索引对象是标准索引对象的层次模拟对象,标准索引对象通常在pandas对象中存储axis标签。您可以将MultiIndex看作元组数组,其中每个元组都是唯一的。可以从数组列表(使用MultiIndex.from_arrays())、元组数组(使用MultiIndex.from_tuples())、交叉迭代集(使用MultiIndex.from_product())或DataFrame(使用MultiIndex.from_frame())创建多索引。当向索引构造函数传递一组元组时,它将尝试返回一个多索引。下面的示例演示了初始化多索引的不同方法。

    import pandas as pd
    import numpy as np
    
    arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],\
      ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
      
    tuples = list(zip(*arrays))
    tuples
    '''
    [('bar', 'one'),
     ('bar', 'two'),
     ('baz', 'one'),
     ('baz', 'two'),
     ('foo', 'one'),
     ('foo', 'two'),
     ('qux', 'one'),
     ('qux', 'two')]
     '''
     index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
     '''
     MultiIndex([('bar', 'one'),
                ('bar', 'two'),
                ('baz', 'one'),
                ('baz', 'two'),
                ('foo', 'one'),
                ('foo', 'two'),
                ('qux', 'one'),
                ('qux', 'two')],
               names=['first', 'second'])
    '''
    s = pd.Series(np.random.randn(8), index=index)
    s
    '''
    first  second
    bar    one       0.606254
           two      -1.193545
    baz    one       1.226008
           two       0.486978
    foo    one       1.469800
           two       0.338351
    qux    one      -0.892168
           two      -0.650476
    dtype: float64
    '''
    

    当你想要两个迭代中的每一对元素时,使用MultiIndex.from_product()方法会更容易:
    这种貌似是最简单的哇,记住pd.MultiIndex.from_product

    iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]
    pd.MultiIndex.from_product(iterables, names=['first', 'second'])
    '''
    MultiIndex([('bar', 'one'),
                ('bar', 'two'),
                ('baz', 'one'),
                ('baz', 'two'),
                ('foo', 'one'),
                ('foo', 'two'),
                ('qux', 'one'),
                ('qux', 'two')],
               names=['first', 'second'])
    '''
    

    您还可以使用MultiIndex.from_frame()方法直接从一个DataFrame构造一个多索引。这是MultiIndex.to_frame()的补充方法。
    *作者感觉这种是最麻烦的,不过挺检验对多维数组的掌握,建议手打一下 *

    df = pd.DataFrame([['bar', 'one'], ['bar', 'two'],['baz', 'one'],['baz', 'two'], ['foo', 'one'], ['foo', 'two'], ['qux', 'one'],['qux', 'two']], columns=['first', 'second'])
    pd.MultiIndex.from_frame(df)
    '''
    MultiIndex([('bar', 'one'),
                ('bar', 'two'),
                ('baz', 'one'),
                ('baz', 'two'),
                ('foo', 'one'),
                ('foo', 'two'),
                ('qux', 'one'),
                ('qux', 'two')],
               names=['first', 'second'])
    '''
    

    为了方便,你可以直接将数组列表传递到Series或DataFrame来自动构造一个多索引:

    arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
    		  np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
    arrays
    '''
    [array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
           dtype='<U3'),
     array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'],
           dtype='<U3')]
    '''
    s = pd.Series(np.random.randn(8), index=arrays) # 创建耽搁Series试试
    s
    '''
    bar  one    0.042885
         two    1.075552
    baz  one   -0.437966
         two    0.624236
    foo  one    0.101495
         two    0.639600
    qux  one   -0.260703
         two   -0.881295
    dtype: float64
    '''
    
    df = pd.DataFrame(np.random.randn(8,4), index=arrays)
    df
    '''
                    0         1         2         3
    bar one -0.424972  0.567020  0.276232 -1.087401
        two -0.673690  0.113648 -1.478427  0.524988
    baz one  0.404705  0.577046 -1.715002 -1.039268
        two -0.370647 -1.157892 -1.344312  0.844885
    foo one  1.075770 -0.109050  1.643563 -1.469388
        two  0.357021 -0.674600 -1.776904 -0.968914
    qux one -1.294524  0.413738  0.276662 -0.472035
        two -0.013960 -0.362543 -0.006154 -0.923061
    '''
    
    

    所有的多索引构造函数都接受一个names参数,该参数存储级别本身的字符串名称。如果没有提供姓名,则不会分配:

    df.index.names
    '''
    FrozenList([None, None])
    '''
    

    这个索引可以返回pandas对象的任何轴,索引的级别由您决定:

    df = pd.DataFrame(np.random.randn(3,8),index=['A', 'B', 'C'], coolums=index)
    df
    '''
    first        bar                 baz                 foo                 qux          
    second       one       two       one       two       one       two       one       two
    A       0.895717  0.805244 -1.206412  2.565646  1.431256  1.340309 -1.170299 -0.226169
    B       0.410835  0.813850  0.132003 -0.827317 -0.076467 -1.187678  1.130127 -1.436737
    C      -1.413681  1.607920  1.024180  0.569605  0.875906 -2.211372  0.974466 -2.006747
    
    '''
    df = pd.DataFrame(np.random.randn(6,6), index=index[:6], columns=index[:6])
    df
    '''
    first              bar                 baz                 foo          
    second             one       two       one       two       one       two
    first second                                                            
    bar   one    -0.410001 -0.078638  0.545952 -1.219217 -1.226825  0.769804
          two    -1.281247 -0.727707 -0.121306 -0.097883  0.695775  0.341734
    baz   one     0.959726 -1.110336 -0.619976  0.149748 -0.732339  0.687738
          two     0.176444  0.403310 -0.154951  0.301624 -2.179861 -1.369849
    foo   one    -0.954208  1.462696 -1.743161 -0.826591 -0.345352  1.314232
          two     0.690579  0.995761  2.396780  0.014871  3.357427 -0.317441
    '''
    

    我们已经“分散”了更高级别的索引,以使控制台输出对你来说更容易一些。注意索引的显示方式可以通过pandas.set_options()中的multi_sparse选项来控制:
    元组是标签的必备之选

    pd.Series(np.random.randn(8), index=tuples)
    '''
    (bar, one)    0.146193
    (bar, two)    0.011110
    (baz, one)    0.698768
    (baz, two)    0.277018
    (foo, one)   -0.014839
    (foo, two)   -0.348363
    (qux, one)    0.680304
    (qux, two)    0.299718
    dtype: float64
    '''
    
    

    多索引很重要的原因是,它允许您执行分组、选择和重塑操作,我们将在下面和文档的后续部分中描述这些操作。正如您将在后面几节中看到的,您会发现自己使用分层索引的数据,而无需自己显式地创建多索引。但是,当从文件加载数据时,您可能希望在准备数据集时生成自己的多索引。

    #########################################################
    写在最后:
    自己和朋友成立了一个工作室——图灵数据科学工作室(VX:DataUpward)
    一是想和大家交个朋友
    二是想帮助朋友们跳过我们遇到的坑,尽快找到解决办法。

    ======================================================
    工作室的运行也需要付出各种成本,“活下去”是我们的当务之急,如果大家有 :

    • 数据分析(报告);
    • 商业数据调研;
    • 数据可视化展示;
    • 数据爬虫;
    • -数据模型开发;
    • 机器学习算法挖掘

    • 也欢迎和我们工作室开展合作~
      在这里插入图片描述
    展开全文
  • python中DataFrame多重索引问题

    千次阅读 2019-06-05 12:25:34
    在Python数据处理中如果实现excel透视表中的功能,则多重索引问题就比较突出了。近来为实现Python自动邮件,需要对数据进行透视表功能,遇到多重索引和多表头问题,下面总结下用法。 一、多重索引 常规的单索引这里...

    在Python数据处理中如果实现excel透视表中的功能,则多重索引问题就比较突出了。近来为实现Python自动邮件,需要对数据进行透视表功能,遇到多重索引和多表头问题,下面总结下用法。
    一、多重索引
    常规的单索引这里就不多赘述了,主要来看下多索引的问题。
    pd.pivot_table产生的多重索引问题。大概数据结构如下图所示:在这里插入图片描述
    当我们要选中其中的某一行时,可以通过一下集中方法实现:
    (1)根据外层索引取数,可以使用ix[]和xs([])取数:
    data.ix[3]:
    在这里插入图片描述
    (2)xs取外层索引
    在这里插入图片描述
    (3)根据外层以及内层索引取数
    在这里插入图片描述

    可以应用result_data2.loc[(3,‘2019-01’)]这种方式选取多个索行

    2、对于多列名可以采用
    result_data2[(‘M2注册数’,‘小短产品’)]这种方式选定特定列

    xd_5.loc[2,(‘注册数’,‘小短产品’)]可以选取index=2,复合列名(‘注册数’,‘小短产品’)的cell数据。

    展开全文
  • 一:线性索引索引表】 就是将索引项集合组织为线性结构,也称为索引表 二:稠密索引 三:分块索引 四:倒排索引 ...
  • 索引是把一个数据文件的关键码和它对应的数据记录相关联的过程。...索引按照结构可以分为线性索引,树形索引和多级索引。所谓线性索引就是将索引项集合组织为线性结构,也称为索引表。重点了解三种线性索引...
  • 选择列 /选择行 / 切片 /布尔判断 1.选择行与列 df[ col ]一般用于选择列;df.loc[ index ]主要针对index选择行 2.选择行 df.loc[ ],按index选择行 3.df.iloc[]-按照整数位置,...5.多重索引 先选择列,再选择行 ...
  • 多重邻接表数组元素结构是:数据、包含 当前索引对应顶点 的第一条边引用。 多重邻接表链表的元素结构是:边的起点、包含当前边的起点的另一条边的引用、边的终点、包含当前边终点的另一条边的...
  • 索引(this_class)和父类索引(super_class)都是一个u2类型的数据,而接口索引集合(interfaces)是一组u2类型的数据的集合,Class文件...由于Java语言不允许多重继承,所以父类索引只有一个,除了java.lang.Obj...
  • 数据结构-----图 索引

    2019-11-19 13:37:24
    1.4多重邻接表 2.图的遍历 2.1BFS 2.2DFS 3.拓扑排序 3.1AOV网 3.2AOE网 4.关键路径 5.最短路径 5.1单源最短路径 5.2无权最短路径 5.3正权最短路径 5.4每队顶点间的最短路径 6.最小支撑树 7图的应用 ...
  • 栈实现综合计算器(带多重括号) 前言 今天学习了栈如何实现综合计算器...通过一一个index值(索引),来遍历我们的运算表达式 如果我们发现是一个数字,就直接入数栈, 发现是符号就进符号栈 如果发现当前的符号栈为...
  • 【操作系统】多级索引、混合索引例题

    千次阅读 多人点赞 2020-08-22 16:21:28
    文件系统采用多重结构搜索文件内容。设块长为512B,每个块号占3B,如果不考虑逻辑块号在物理块中所占的位置,分别求二级索引和三级索引时可寻址的文件最大长度。 设块长为512B,每个块号占3B,一个物理块可放:512/3...
  • 文件结构

    2020-05-14 15:11:00
    文件概念 文件(File)是性质相同的记录的集合。... (1)顺序结构 (2)链接结构 (3)索引结构 文件的 目录结构 主要有: (1)一级目录结构 (2)二级目录结构 (3)树形结构 (4)无环图 顺序文件 顺序文件 是指:按记
  • 线性索引技术包括稠密索引,分块索引多重表和倒排表 静态索引和动态索引的区别 静态索引:插入删除复杂度高,使用内容基本不变得集合,可以是线性或树形(多级),而动态索引:插入删除不能太复杂,适用变化多且快速...
  • 3.文件系统采用多重索引结构搜索文件内容的计算 一次间接二次间接 4.理解文件控制块(目录项) 5.多级目录的优势 文件系统的功能是什么?(详细说明 1.文件管理 2.目录管理 3.文件存储空间管理 4....
  • 11.3 索引文件 11.4索引顺序文件 11.4.1 ISAM文件 *11.4.2 VSAM文件 11.5 散列文件 11.6 多关键字文件 11.6.1 多重表文件 11.6.2 倒排文件 主要内容 知识点 1文件基本概念文件分类记录的逻辑和物理结构 2顺序文件...
  • Ext2和Ext3比较

    2012-12-12 22:24:02
    索引节点采用了多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。 ...
  • 操作系统的文件结构

    2017-09-04 16:34:20
    文件的 逻辑结构 主要有: (1)连续结构 (2)多重结构 (3)转置结构 (4)顺序结构 ...(1)顺序结构 (2)链接结构 (3)索引结构 文件的 目录结构 主要有: (1)一级目录结构 (2)二级目录结构 (3)树形结构 (4)无环图
  • ext2和ext3比较

    千次阅读 2012-05-08 17:48:11
     索引节点采用了多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。  e.g: 假设
  • 文件结构分类 [操作系统]

    千次阅读 2018-05-21 16:10:00
    文件的 逻辑结构 主要有: (1)连续结构 (2)多重结构 (3)转置结构 (4)顺序结构 ...(1)顺序结构 (2)链接结构 (3)索引结构 文件的 目录结构 主要有: (1)一级目录结构 (2)二级目录结构 (3)树形结构 (4)无环图 ...
  • Pandas:数据结构DataFrame

    2020-03-14 22:16:25
    索引选择行选择列df.loc用法df.iloc用法布尔型索引多重索引Pandas基本技巧数据查看、转置添加与修改删除对齐排序:sort_values排序:sort_index课后作业作业一:用四种不同的方法,创建以下Dataframe(保证columns和...
  • 参考答案在题后 判断题判断下列各小题叙述的正误对在题号后的括号内填入 错在题号后填入 1数据的最小单位是数据项( ) 2 多重表文件中主索引为非稠密索引索引为稠密索引( ) 3通常数据结构在计算机中有四种不同的...
  • ch03.表栈队列--多重链表实现学生课程注册0.引言1.题目说明2.代码实现 0.引言 多重链表的练习。...用两个链表做索引,分别存储课程节点和学生节点,注册节点为多重链表。课程为固定的课程,先初始化好;
  • 文件的基本概念 什么是文件 文件的逻辑结构及操作 文件的存储结构 顺序文件 索引文件 ISAM文件 VSAM文件 哈希文件 多关键字文件 多重表文件 倒排文件
  • 课程目录1.1 词向量1.2 神经网络1.3 语言结构:依赖解析1.4 RNN和语言模型1.5 机器翻译1.6 问答系统1.7 NLP中的CNN1.8 子词模型1.9 上下文表示(Contextual Representations)1.10 Transformer1.11 Self-Attention ...
  • 大话数据结构

    2018-12-14 16:02:18
    7.4.4邻接多重表 234 7.4.5边集数组 236 7.5图的遍历 237 我有一天早晨准备出门,发现钥匙不见了。一定是我儿子拿着玩,不知道丢到哪个犄角旮旯去了,你们说,我应该如何找? 7.5.1深度优先遍历 238 7.5.2广度...
  • 数据结构 c语言版

    2012-12-30 19:26:36
    数据结构在很多地方用的到,在计算机行业,很有用的 。 第1章 绪论 1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表现与实现 1.4 算法和算法分析 第2章 线性表 2.1 线性表的类型定义 2.2 线性表...
  • 数据结构(第12章).ppt

    2020-08-19 08:57:23
    第十二章 习题 优点记录随机存放不需要进行排序插入删除方便存取速度快节省存储空间不需要索引区 缺点不能进行顺序存取在经过多次插入和删除操作之后需进行...多关键字文件的组织方法 多重表文件 1 倒排文件 2 特点将所
  • c语言数据结构

    2012-03-25 21:38:21
    1、1 什么是数据结构 1、2 基本概念和术语 1、3 抽象数据类型的表示与实现 1、4 算法和算法分析 1、4、1 算法 1、4、2 算法设计的要求 1、4、3 算法效率的度量 1、4、4 算法的存储空间需求 2 线性表 2、1 线性表...
  • 映射定义索引中有什么字段、字段的类型等结构信息。相当于数据库中表结构定义,或 solr中的schema。因为lucene索引文档时需要知道该如何来索引存储文档的字段。 ES中支持手动定义映射,动态映射两种方式。 Create ...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 335
精华内容 134
关键字:

多重索引结构