《利用Python进行数据分析》 附录 A.2 高阶数组操作

附录A 高阶Numpy操作


A.2 高阶数组操作

       除了神奇索引、切片和布尔值子集外,还有很多方式可以处理数组。虽然大部分数据分析应用程序的繁重工作都是由pandas中的高级函数处理的,但有时候你可能需要编写一些在现有库中找不到的数据算法。


A.2.1 重塑数组

1.一维数组重塑   

       在很多情况下,你将数组从一个形状转换为另一个形状,并且不复制任何数据。为了实现这个功能,可以向reshape数组实例方法传递一个表示新形状的元组。(见图A-1)例如,假设我们有一个一维数组,我们想要把该数组重新排列进一个矩阵(结果展示在图A-2中)

图A-2:按C顺序(行方向)的重塑和按Fortran顺序(列方向)的重塑
图A-1:一维数组重塑

2.多维数组重塑(见图A-3)

图A-3:多维数组重塑

3.reshape的一些操作(见图A-4)

图A-4:reshape一些操作

:如果结果中的值在原始数组中是连续的,则ravel不会生成底层数值的副本。flatten方法的行为类似于ravel,但它总是返回数据的副本(见图A-5)

图A-5:flatten方法

       数据可以按照不同的顺序进行重塑或扁平化。顺序对于新的NumPy用户来说,这是一个有点微妙的主题,因此是下一个子主题。


A.2.2 C顺序和Fortran顺序

       NumPy为你提供内存中数据布局的控制和灵活性。默认情况下,NumPy数组是按行方向顺序创建的。在空间上,这意味着如果你有一个二维的数据数组,数组每行中的元素存储在相邻的存储单元中。行方向顺序的替代方法是列方向顺序,这意味着每列数据中的值都存储在相邻的内存位置中。

        由于历史原因,行和列方向的顺序也分别称为C顺序Fortran顺序。在FORTRAN 77语言中,矩阵都是列方向的。

       像reshape和ravel函数接收一个order参数,该参数表示数据在数组中使用哪种顺序。在大部分情况下,该参数可以被设置为’C’’F'(还有一些不太常用的选项’A’和’K'。请参考NumPy官方文档)。(见图A-6)

图A-6:行列顺序设置

       对二维以上的数组重塑可能会有点令人费解(见图A-3)。C顺序和Fortran顺序的核心区别就是在维度方向上遍历的方式:

C顺序/行方向顺序

首先遍历更高的维度(例如,在轴0上行进之前先在轴1上行进)

Fortran顺序/列方向顺序

最后遍历更高的维度(例如,在轴1上行进之前先在轴0上行进)



A.2.3 连接和分隔数组

1.numpy.concatenate可以获取数组的序列(元组、列表等),并沿着输入轴将它们按顺序连接在一起(见图A-7)

图A-7:按顺序连接

2.使用split将一个数组沿轴向切片成多个数组(见图A-8)

图A-8:将数组切片

附:全部有关连接和分隔的函数列表,其中一些仅作为通用concatenate的便捷方法(见表A-1)

表A-1:数组连接函数

A.2.3.1 堆叠助手:r 和c

        在NumPy命名空间中有两个特殊的对象:r_和c_,它们可以使堆栈数组的操作更为简洁(见图A-9)

图A-9:r、c堆叠数组

这些函数还可以将切片转换为数组(见图A-10)

图A-10:将切片转换为数组

A.2.4 重复元素:tile和repeat

1.一维数组的重复    

       repeat和tile函数是用于重复或复制数组的两个有用的工具。repeat函数按照给定次数对数组中的每个元素进行复制,生成一个更大的数组(见图A-11)

图A-11:一维数组的重复

: 对于NumPy而言,复制或重复数组的需求可能不如其他数组编程框架(如MATLAB)那样常见。其中一个原因是广播通常会更好地满足这一需求,这是下一部分的主题。

2.多维数组可以在指定的轴向上对它们的元素进行重复(见图A-12)

图A-12:多维数组重复

:如果没有传递轴,数组将首先扁平化

3.tile是一种快捷方法,它可以沿着轴向堆叠副本。在视觉上,你可以把它看作类似于“铺设瓷砖”(见图A-13)

图A-13:tile方法

:第二个参数是瓷砖的数量。用标量来说,铺设是逐行进行的,而不是逐列。tile的第二个参数可以是表示“铺瓷砖”布局的元组


A.2.5 神奇索引的等价方法:take和put

如果你回忆第4章,使用整数数组通过神奇索引是获取、设置数组子集的一种方式

还有其他一些ndarray方法可以用于特殊情况下在单个轴上的数据选取(见图A-14)

图A-14:单个轴上数据选取

如果要在别的轴上使用take,可以传递axis关键字(见图A-15)

图A-15:传递axis关键字

:put不接受axis参数,而是将数组索引到扁平版本(一维,C顺序)。因此,当您需要使用其他轴上的索引数组设置元素时,通常最容易使用神奇索引。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容