9-Python-NumPy数组元素的添加与删除

数组元素的添加与删除 相关函数列表如下:

函数 元素及描述
resize 返回指定形状的新数组
append 将值添加到数组末尾
insert 沿指定轴将值插入到指定下标之前
delete 删掉某个轴的子数组,并返回删除后的新数组
unique 查找数组内的唯一元素

1)\color{red}{numpy.resize} 返回指定大小的新数组

numpy.resize(arr, shape)
  • arr:要修改大小的数组
  • shape:返回数组的新形状

新数组小于原始数组

>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> b = np.resize(a,(2,2))
>>> b
array([[1, 2],
       [3, 4]])

新数组大于原始数组

>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])

>>> c = np.resize(a,(3,3))
>>> c
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3]])

>>> d = np.resize(a,(3,4))
>>> d
array([[1, 2, 3, 4],
       [5, 6, 1, 2],
       [3, 4, 5, 6]])

总结:

  • 如果新数组大小小于原始大小,会默认按行对原始数组进行取值,直到取够为止
  • 如果新数组大小大于原始大小,会默认按行重复使用原始数组中的元素,会包含原始数组中的元素的副本。

2)\color{red}{numpy.append} 在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中。 此外,输入数组的维度必须匹配否则将生成ValueError。

numpy.append(arr, values, axis=None)
  • arr:输入数组
  • values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)
  • axis:默认为 None
    • 当axis=None时,是横向加成,对添加的元素的个数和类型无要求,返回总是为一维数组
    • 当axis=0时,增加的是原始数组的行数,因此添加的列表必须是二维[[]]。若要添加一行,子列表元素个数是1[[]],添加二行,子列表元素个数是2[[],[]]。子列表元素个数要与原始数组的列数相同。
    • 当axis=1时,增加的是原始数组的列数,因此添加的列表元素个数要与原始数组的行数相同,增加的列数取决于子列表的元素个数

不定义axis,返回的都是一维数组

>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> np.append(a, [7,8])
array([1, 2, 3, 4, 5, 6, 7, 8])

>>> np.append(a, [7,8,9])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

''' 尝试添加多维数组'''
>>> np.append(a, [[7,8],[9,]])
array([1, 2, 3, 4, 5, 6, list([7, 8]), list([9])], dtype=object)

定义axis=0

>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])

'''沿轴 0 添加元素,即增加原始数组的行数'''
>>> np.append(a, [[7,8,9]],axis = 0)
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

>>> np.append(a, [[7,8,9],[10,11,12]],axis = 0)
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

定义axis=1

>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])


'''沿轴 1 添加元素,即增加原始数组的列数'''
>>> np.append(a, [[7],[8]],axis = 1)
array([[1, 2, 3, 7],
       [4, 5, 6, 8]])

>>> np.append(a, [[7,9],[8,10]],axis = 1)
array([[ 1,  2,  3,  7,  9],
       [ 4,  5,  6,  8, 10]])

3)\color{red}{numpy.insert} 用法和 numpy.append类似,但没有append严格

numpy.insert(arr, obj, values, axis)
  • arr:输入数组
  • obj:在其之前插入值的索引
  • values:要插入的值
  • axis:沿着它插入的轴,如果未提供,则输入数组会被展开
    • 不传递axis参数时,是横向加成,添加对象是单个元素或者是一维数组(列表),可以是一个元素,也可以是一个列表(包含1个以上元素),返回总是为一维数组
    • 当axis=0时,添加对象可以是1个元素或者数组,当为数组时,添加的数组维度可以是(1,1)或者和原始数组相等,但不能大或者不等
    • 当axis=1时,添加对象可以是1个元素或者数组,当为数组时,添加数组的维度可以是(1,1),或者必须原始数组列数相同,但不能大或者不等

numpy.insert添加的对象可以是一个元素或者数组

未传递 axis 参数,生成的是一维数组

>>> import numpy as np
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> a
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.insert(a,3,11)
array([ 1,  2,  3, 11,  4,  5,  6])

>>> np.insert(a,3,[11,12])
array([ 1,  2,  3, 11, 12,  4,  5,  6])

>>> np.insert(a,3,[11,12,13])
array([ 1,  2,  3, 11, 12, 13,  4,  5,  6])

定义axis=0

>>> np.insert(a,1,11,axis = 0)
array([[ 1,  2],
       [11, 11],
       [ 3,  4],
       [ 5,  6]])

>>> np.insert(a,1,[11],axis = 0)
array([[ 1,  2],
       [11, 11],
       [ 3,  4],
       [ 5,  6]])

>>> np.insert(a,1,[11,12],axis = 0)
array([[ 1,  2],
       [11, 12],
       [ 3,  4],
       [ 5,  6]])

>>> np.insert(a,1,[[11,12],[13,14]],axis = 0)
array([[ 1,  2],
       [11, 12],
       [13, 14],
       [ 3,  4],
       [ 5,  6]])
>>> np.insert(a,1,[11,12,13],axis = 0)
Traceback (most recent call last):
ValueError: could not broadcast input array from shape (1,3) into shape (1,2)

定义axis=1

>>> np.insert(a,1,11,axis = 1)
array([[ 1, 11,  2],
       [ 3, 11,  4],
       [ 5, 11,  6]])

>>> np.insert(a,1,[11],axis = 1)
array([[ 1, 11,  2],
       [ 3, 11,  4],
       [ 5, 11,  6]])

>>> np.insert(a,1,[11,12],axis = 1)
Traceback (most recent call last):
ValueError: could not broadcast input array from shape (2,1) into shape (3,1)

>>> np.insert(a,1,[11,12,13],axis = 1)
array([[ 1, 11,  2],
       [ 3, 12,  4],
       [ 5, 13,  6]])

>>> np.insert(a,1,[[11],[12],[13]],axis = 1)
array([[ 1, 11, 12, 13,  2],
       [ 3, 11, 12, 13,  4],
       [ 5, 11, 12, 13,  6]])

>>> np.insert(a,1,[[11,12,13],[14,15,16],[17,18,19]],axis = 1)
array([[ 1, 11, 14, 17,  2],
       [ 3, 12, 15, 18,  4],
       [ 5, 13, 16, 19,  6]])

4)\color{red}{numpy.delete} 返回从输入数组中删除指定子数组的新数组。 与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开。

Numpy.delete(arr, obj, axis)
  • arr:输入数组
  • obj:可以被切片,整数或者整数数组,表明要从输入数组删除的子数组
  • axis:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开

未传递 Axis 参数,生成一个一维数组

>>> import numpy as np
>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> np.delete(a,5)
array([ 0,  1,  2,  3,  4,  6,  7,  8,  9, 10, 11])

定义axis=0,对行进行操作

>>> import numpy as np
>>> a = np.arange(12).reshape(3,4)
>>> np.delete(a,5)
array([ 0,  1,  2,  3,  4,  6,  7,  8,  9, 10, 11])
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

''' 删除第2行 '''
>>> np.delete(a,1,axis = 0)
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11]])

'''删除第2行和第3行'''
>>> np.delete(a,[1,2],axis = 0)
array([[0, 1, 2, 3]])

定义axis=1,对列进行操作

>>> import numpy as np
>>> a = np.arange(12).reshape(3,4)
>>> np.delete(a,5)
array([ 0,  1,  2,  3,  4,  6,  7,  8,  9, 10, 11])
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

''' 删除第2列 '''
>>> np.delete(a,1,axis = 1)
array([[ 0,  2,  3],
       [ 4,  6,  7],
       [ 8, 10, 11]])

''' 删除第2列和第3列 '''
>>> np.delete(a,[1,2],axis = 1)
array([[ 0,  3],
       [ 4,  7],
       [ 8, 11]])

切片操作 必须使用 numpy.s_

>>> import numpy as np
>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

>>> np.delete(a, np.s_[1:3])
array([ 0,  3,  4,  5,  6,  7,  8,  9, 10, 11])

''' 删除第2行和第3行 '''
>>> np.delete(a, np.s_[1:3],axis=0)
array([[0, 1, 2, 3]])

''' 删除第2列和第3列 '''
>>> np.delete(a, np.s_[1:3],axis=1)
array([[ 0,  3],
       [ 4,  7],
       [ 8, 11]])

''' 步长为2 进行删除,删除 index 为 0, 2, 4 ....的元素 '''
>>> np.delete(a, np.s_[::2])
array([ 1,  3,  5,  7,  9, 11])
>>> np.delete(a, np.s_[::2],axis=0)
array([[4, 5, 6, 7]])
>>> np.delete(a, np.s_[::2],axis=1)
array([[ 1,  3],
       [ 5,  7],
       [ 9, 11]])

5)\color{red}{numpy.unique} 用于去除数组中的重复元素

numpy.unique(arr, return_index, return_inverse, return_counts)
  • arr:输入数组,如果不是一维数组则会展开
  • return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储
  • return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储
  • return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数
>>> import numpy as np
>>> a = np.array([5,2,6,2,7,5,6,8,2,9])
>>> a
array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])
>>> np.unique(a)
array([2, 5, 6, 7, 8, 9])

return_index = True

>>> import numpy as np
>>> a = np.array([5,2,6,2,7,5,6,8,2,9])
>>> a
array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])

>>> np.unique(a, return_index = True)
(array([2, 5, 6, 7, 8, 9]), array([1, 0, 2, 4, 7, 9]))

return_inverse = True

>>> import numpy as np
>>> a = np.array([5,2,6,2,7,5,6,8,2,9])
>>> a
array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])

>>> np.unique(a,return_inverse = True)
(array([2, 5, 6, 7, 8, 9]), array([1, 0, 2, 0, 3, 1, 2, 4, 0, 5]))

return_counts = True

>>> import numpy as np
>>> a = np.array([5,2,6,2,7,5,6,8,2,9])
>>> a
array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])

>>> np.unique(a,return_counts = True)
(array([2, 5, 6, 7, 8, 9]), array([3, 2, 2, 1, 1, 1]))

转:https://www.runoob.com/numpy/numpy-array-manipulation.html#numpy_oparr1

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

推荐阅读更多精彩内容