ndarray高维数组的索引和切片

ndarray高维数组的索引和切片

假设有一个数组不是一维的,而是多维的,那么又该如何进行切片呢?首先先导入numpy模块,生成一个多维数组

import numpy

arr2 = np.random.randint(0,20,(3,3))

arr2

array([[ 2, 17, 11],

[ 4, 15, 14],

[10, 18,  6]])

这里生成了一个三行三列的二维数组,用一维数组的方法进行元素的读取

arr2[1]

array([ 4, 15, 14])

发现结果是一个一维数组,而且这个一维数组正是二维数组的第二行,那再加一个索引值会发现什么呢?

arr2[1,1]

15

发现结果是一个数值,这个数值正是数组[ 4, 15, 14]中的第二个元素,到这里我们发现了什么呢?我们发现多维数组其实就是多个数组的嵌套啊,有没有?比如上面的二维数组可以这样展开[[ 2, 17, 11],[ 4, 15, 14],[10, 18,  6]],很明显,蓝色框表示一个数组,这个数组的元素是以红色为框的数组。这样读取数组的时候,就可以一层一层剥洋葱一样,从外层数组剥起,以元素15为例,15是在蓝色框里的第二个数组中,所以首先剥开最外层的蓝色框,arr2[1],这里要注意,数组下标都是从0开始的,也就是说第二个数组的下标是1不是2.剥完就得到了红色框的数组[4,15,14],继续往下剥,15在这个数组的第二个位置,所以arr2[1][1]就得到15啦。下面以一个三维数组来进一步证明这个结论。

arr3 = np.random.randint(0,20,(3,3,3))

arr3#得到一个三维数组

array([[[ 8, 15,  5],

[12, 15,  0],

[14, 17, 16]],

[[ 9, 16, 17],

[ 2,16,  5],

[16,  6, 12]],

[[18, 13,  1],

[13,  2, 19],

[ 7,  1,  4]]])

假设我们要得到红色的16

arr3[1]#首先剥开第一层,得到三维数组中的第二个数组

array([[ 9, 16, 17],

[ 2, 16,  5],

[16,  6, 12]])

可以看出这是个三行三列的二维数组,继续

arr3[1,1]#得到一个一维数组

array([ 2, 16,  5])

arr3[1,1,1]

16

最后得到我们想要的结果16,所以我们的猜想是正确的呀,有没有。

最后,我们再提出一个问题,假如我们最后需要的不仅仅是一个数值,而是一个数组切片,而且这个切片不是连续的,而是特定的值,那该怎么办呢?我们以新生成的一个数组为例:

import numpy

arr1 = np.random.randint(2,20,10)

arr1

array([ 7,16,3,  3,13,15,  4,  8, 16, 14])

假如我们要得到标红的数值组成的一个数组切片,那么靠以上的一层一层剥肯定不行了,那该怎么办呢?诶,这是个一维数组,所以只需要剥一层就能得到所需要的元素,但这样只能得到一个数值啊,要得到多个数值咋办?加个列表啊

arr1[[1,2,4,5]]

array([16,  3, 13, 15])

这样,把原来的一个索引值变成一个索引列表,把所需要的所有元素的索引都加进去,这样不就可以了嘛。

那假如是多维的呢?以二维数组为例。

arr2 = np.random.randint(2,20,(3,3))arr2

array([[8, 19, 11],

[ 6,  4,9],

[ 4,15, 11]])

我们来切8,9,15

arr2[[0,0,2],[0,1,1]]

array([ 8, 19, 15])

可以看出,二维数组需要两个索引列表,第一个索引列表表示的是二维数组中该数值所在的一维数组的索引,即位置,第二个索引列表表示的是该数值所在的一维数组的索引。以数值8为例,将二维数组展开来写[[8, 19, 11],[ 6,  4,  9],[ 4, 15, 11]],8的位置在二维数组中的第1个数组里面,所以它的第一个索引值为0,剥开进到这个第1个数组[8, 19, 11],8又在这个数组的第一个位置,故其索引值为0。其它值类推

再来举一个三维数组为例

arr3 = np.random.randint(2,20,(2,3,3))

arr3

array([[[12,  5,  9],

[12,  8,  5],

[10, 18,19]],

[[18, 18,  9],

[17,15,  3],

[17, 10,6]]])

#切取19,6,15

arr3[[0,1,1],[2,2,1],[2,2,1]]

array([19,  6, 15])

结果非常amazing,跟我们所想的一样。以19为例,将三维数组展开,[[[12,  5,  9],[12,  8,  5],[10, 18, 19]], [[18, 18,  9],[17, 15,  3], [17, 10,  6]]]。19的位置在三维数组中的第一个二维数组中,其索引为0,[[12,  5,  9],[12,  8,  5],[10, 18, 19]],然后又在这个二维数组中的第三个一维数组中,其索引值为2,[10, 18,19],最后,19又在这个一维数组中的第三个位置,其索引值为2。所以19总的索引值为[2,2,2],分别在三个不同的索引值列表中。

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