当前位置: 首页 > news >正文

Numpy 数组元素添加与元素删除函数详解

元素添加

Numpy中有类似python列表操作函数append()及insert(),但是用法稍有不同,append()及insert()不作为数组的实例方法使用。

np.append()

np.append()的参数如下

def append(arr, values, axis=None):

其中,arr为数组对象,values为要插入的值或子数组,axis为0则沿行方向添加元素,为1则沿列方向添加元素,但都是将元素加至末尾

插入一维数组
import numpy as npdata1 = np.random.randint(0,10,5)
print(data1)data1 = np.append(data1, 100)print(data1)
# 
# [1 0 3 1 7]
# [  1   0   3   1   7 100]
插入二维数组

插入二维数组就会涉及到插入的方式,也就是沿行添加还是沿列添加,并且要保证数组每个维度的长度相等,而且如果指定插入的轴,则会将数组扁平化处理,也就是降维至一维数组,并且插入的数组维度要与原数组相同

不指定插入的轴
import numpy as npdata1 = np.random.randint(0,10,(3,4))
print(data1)
data2 = np.append(data1,[[1,1,1,1]])
print(data2)# [[6 1 3 4]
#  [7 6 2 6]
#  [6 5 7 4]]
# [6 1 3 4 7 6 2 6 6 5 7 4 1 1 1 1]

可以看到数组做了扁平化处理,然后将元素添加到了末尾的位置 

沿行插入
import numpy as npdata1 = np.random.randint(0,10,(3,4))
print(data1)
data2 = np.append(data1,[[1,1,1,1]], axis=0)
print(data2)# [[9 2 7 3]
#  [6 4 1 8]
#  [6 2 1 1]]
# [[9 2 7 3]
#  [6 4 1 8]
#  [6 2 1 1]
#  [1 1 1 1]]
沿列插入
import numpy as npdata1 = np.random.randint(0,10,(3,4))
print(data1)
data2 = np.append(data1,np.ones((3,1)), axis=1)
print(data2)# [[9 4 1 6]
#  [6 7 1 0]
#  [0 2 5 6]]
# [[9. 4. 1. 6. 1.]
#  [6. 7. 1. 0. 1.]
#  [0. 2. 5. 6. 1.]]

 注意这里的维度要保持一致,也就是形状要为(3,1)

insert()

insert()函数的作用为指定索引位置插入元素或子数组,参数如下

def insert(arr, obj, values, axis=None):

可以看到arr为数组对象,obj为索引位置,values为要插入的元素或子数组,axis为插入的轴

同样这里要保准数组维度,并且不指定axis会导致数组扁平化

插入一维数组
import numpy as npdata1 = np.random.randint(0,10,5)
print(data1)data2 = np.insert(data1,2,100)
print(data2)
# [8 0 6 5 1]
# [  8   0 100   6   5   1]
插入二维数组
不指定插入的轴
import numpy as npdata1 = np.random.randint(0,10,(2,3))
print(data1)data2 = np.insert(data1,2,[1,2,3])
# [[7 3 9]
#  [3 1 3]]
# [7 3 1 2 3 9 3 1 3]

可以看到这里直接将数组扁平化后,将要插入的子数组按元素插入了指定的索引位置

沿行插入
import numpy as npdata1 = np.random.randint(0,10,(2,3))
print(data1)data2 = np.insert(data1,2,[[1,2,3]],axis=0)
print(data2)
# [[1 3 3]
#  [2 3 0]]
# [[1 3 3]
#  [2 3 0]
#  [1 2 3]]
沿列插入
import numpy as npdata1 = np.random.randint(0,10,(2,3))
print(data1)data2 = np.insert(data1,2,np.ones((2,1)),axis=1)
print(data2)
# [[5 9 5]
#  [6 0 3]]
# [[5 9 1 1 5]
#  [6 0 1 1 3]]
补充:insert()函数的广播机制

insert函数在进行二维数组的插入时,不同于append()函数需要插入数组的维度要与被插入的数组一致,insert()函数可以将插入数组进行广播,从而匹配形状

import numpy as npdata1 = np.random.randint(0,10,(2,3))
print(data1)data2 = np.insert(data1,2,1,axis=1)
data3 = np.insert(data1,2,[1,1,1],axis=0)
print(data2)
print(data3)
# [[2 8 7]
#  [5 8 9]]
# [[2 8 1 7]
#  [5 8 1 9]]
# [[2 8 7]
#  [5 8 9]
#  [1 1 1]]

这里分别使用常量1和一维数组作为插入对象进行了广播尝试

元素删除

np.delete()

元素删除这里使用np.delete()函数,函数参数如下

def delete(arr, obj, axis=None):

arr为要进行删除的数组对象,obj为要删除的元素对应的下标,axis为要进行删除的轴

同样,若不指定axis,则会对数组进行扁平化处理

对一维数组进行删除
import numpy as npdata1 = np.random.randint(0,10,5)
print(data1)data2 = np.delete(data1,2)
print(data2)
# 
# [1 1 4 3 6]
# [1 1 3 6]
对二维数组进行阐述
不指定轴
import numpy as npdata1 = np.random.randint(0,10,(2,3))
print(data1)data2 = np.delete(data1,2)
print(data2)
# [[5 4 6]
#  [0 3 7]]
# [5 4 0 3 7]

可以看到数组扁平化后删除了索引为2的值

删除指定行
import numpy as npdata1 = np.random.randint(0,10,(3,4))
print(data1)data2 = np.delete(data1,2,axis=0)
print(data2)
# [[8 5 7 2]
#  [9 0 7 1]
#  [6 2 9 0]]
# [[8 5 7 2]
#  [9 0 7 1]]
删除指定列
import numpy as npdata1 = np.random.randint(0,10,(3,4))
print(data1)data2 = np.delete(data1,2,axis=1)
print(data2)
# [[3 5 0 2]
#  [0 0 0 2]
#  [4 2 8 6]]
# [[3 5 2]
#  [0 0 2]
#  [4 2 6]]

http://www.lryc.cn/news/442182.html

相关文章:

  • 【Python】高效图像处理库:pyvips
  • java项目之在线考试与学习交流网页平台源码(springboot)
  • 【Android源码】屏蔽系统通知出现在系统栏中
  • MySQL索引测试
  • 【软件设计】常用设计模式--观察者模式
  • 东北非国企就职体验
  • 经典sql题(二)求连续登录最多天数用户
  • A. Closest Point
  • 沟通更高效:微信群转移至企业微信操作攻略!
  • 计算机毕业设计 基于Python Django的旅游景点数据分析与推荐系统 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • 关于安卓App自动化测试的一些想法
  • Bigemap GIS Office 2024注册机 全能版地图下载软件
  • 秦时明月6.2魔改版+GM工具+虚拟机一键端
  • firewalld实现NAT端口转发
  • 中国电子学会202309青少年软件编程(Python)等级考试试卷(二级)真题
  • 第四天旅游线路预览——从贾登峪到喀纳斯景区入口(贾登峪游客服务中心)
  • 个人常用命令
  • 如何根据协议请求去捕捉在个文件中发出去的
  • Lombok -----此java库 常用的注解及其功能总结
  • 纯前端表格导出Excel
  • sourceTree保姆级教程7:(合并某次提交)
  • JVM面试知识点手册
  • Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象
  • kubernetes调度2
  • Android中如何处理运行时权限?
  • 【PyCharm】PyCharm:让开发者效率倍增的编程利器
  • Spring Boot- 配置中心问题
  • 字符串专题-1
  • Unsupervised Deep Representation Learning for Real-Time Tracking
  • 第二讲 数据结构