Numpy array数据的增、删、改、查

本文详细介绍了使用Python的NumPy库进行数组操作的基本方法,包括数组的创建、增删改查等常见操作,并通过实例展示了如何高效地处理数组数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作:

增、删、改、查的方法有很多很多种,这里只展示出常用的几种。

[python] view plain copy
print ?
  1. >>> import numpy as np  
  2. >>> a = np.array([[1,2],[3,4],[5,6]])#创建3行2列二维数组。  
  3. >>> a  
  4. array([[12],  
  5.        [34],  
  6.        [56]])  
  7. >>> a = np.zeros(6)#创建长度为6的,元素都是0一维数组  
  8. >>> a = np.zeros((2,3))#创建3行2列,元素都是0的二维数组  
  9. >>> a = np.ones((2,3))#创建3行2列,元素都是1的二维数组  
  10. >>> a = np.empty((2,3)) #创建3行2列,未初始化的二维数组  
  11. >>> a = np.arange(6)#创建长度为6的,元素都是0一维数组array([0, 1, 2, 3, 4, 5])  
  12. >>> a = np.arange(1,7,1)#结果与np.arange(6)一样。第一,二个参数意思是数值从1〜6,不包括7.第三个参数表步长为1.  
  13. a = np.linspace(0,10,7# 生成首位是0,末位是10,含7个数的等差数列[  0.           1.66666667   3.33333333   5.         6.66666667  8.33333333  10.        ]  
  14. a = np.logspace(0,4,5)#用于生成首位是10**0,末位是10**4,含5个数的等比数列。[  1.00000000e+00   1.00000000e+01   1.00000000e+02   1.00000000e+03 1.00000000e+04]  
>>> import numpy as np
>>> a = np.array([[1,2],[3,4],[5,6]])#创建3行2列二维数组。
>>> a
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> a = np.zeros(6)#创建长度为6的,元素都是0一维数组
>>> a = np.zeros((2,3))#创建3行2列,元素都是0的二维数组
>>> a = np.ones((2,3))#创建3行2列,元素都是1的二维数组
>>> a = np.empty((2,3)) #创建3行2列,未初始化的二维数组
>>> a = np.arange(6)#创建长度为6的,元素都是0一维数组array([0, 1, 2, 3, 4, 5])
>>> a = np.arange(1,7,1)#结果与np.arange(6)一样。第一,二个参数意思是数值从1〜6,不包括7.第三个参数表步长为1.
a = np.linspace(0,10,7) # 生成首位是0,末位是10,含7个数的等差数列[  0.           1.66666667   3.33333333   5.         6.66666667  8.33333333  10.        ]
a = np.logspace(0,4,5)#用于生成首位是10**0,末位是10**4,含5个数的等比数列。[  1.00000000e+00   1.00000000e+01   1.00000000e+02   1.00000000e+03 1.00000000e+04]

[python] view plain copy
print ?
  1. >>> a = np.array([[1,2],[3,4],[5,6]])  
  2. >>> b = np.array([[10,20],[30,40],[50,60]])  
  3. >>> np.vstack((a,b))  
  4. array([[ 1,  2],  
  5.        [ 3,  4],  
  6.        [ 5,  6],  
  7.        [1020],  
  8.        [3040],  
  9.        [5060]])  
  10. >>> np.hstack((a,b))  
  11. array([[ 1,  21020],  
  12.        [ 3,  43040],  
  13.        [ 5,  65060]])  
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> b = np.array([[10,20],[30,40],[50,60]])
>>> np.vstack((a,b))
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [10, 20],
       [30, 40],
       [50, 60]])
>>> np.hstack((a,b))
array([[ 1,  2, 10, 20],
       [ 3,  4, 30, 40],
       [ 5,  6, 50, 60]])

不同维数的数组直接相加显然是不允许的。但是可以用一个n行列向量和一个m列行向量构造出一个n×m矩阵

[python] view plain copy
print ?
  1. >>> a = np.array([[1],[2]])  
  2. >>> a  
  3. array([[1],  
  4.        [2]])  
  5. >>> b=([[10,20,30]])#生成一个list,注意,不是np.array。  
  6. >>> b  
  7. [[102030]]  
  8. >>> a+b  
  9. array([[112131],  
  10.        [122232]])  
  11. >>> c = np.array([10,20,30])  
  12. >>> c  
  13. array([102030])  
  14. >>> c.shape  
  15. (3,)  
  16. >>> a+c  
  17. array([[112131],  
  18.        [122232]])  
>>> a = np.array([[1],[2]])
>>> a
array([[1],
       [2]])
>>> b=([[10,20,30]])#生成一个list,注意,不是np.array。
>>> b
[[10, 20, 30]]
>>> a+b
array([[11, 21, 31],
       [12, 22, 32]])
>>> c = np.array([10,20,30])
>>> c
array([10, 20, 30])
>>> c.shape
(3,)
>>> a+c
array([[11, 21, 31],
       [12, 22, 32]])

[python] view plain copy
print ?
  1. >>> a  
  2. array([[12],  
  3.        [34],  
  4.        [56]])  
  5. >>> a[0# array([1, 2])  
  6. >>> a[0][1]#2  
  7. >>> a[0,1]#2  
  8. >>> b = np.arange(6)#array([0, 1, 2, 3, 4, 5])  
  9. >>> b[1:3]#右边开区间array([1, 2])  
  10. >>> b[:3]#左边默认为 0array([0, 1, 2])  
  11. >>> b[3:]#右边默认为元素个数array([3, 4, 5])  
  12. >>> b[0:4:2]#下标递增2array([0, 2])  
>>> a
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> a[0] # array([1, 2])
>>> a[0][1]#2
>>> a[0,1]#2
>>> b = np.arange(6)#array([0, 1, 2, 3, 4, 5])
>>> b[1:3]#右边开区间array([1, 2])
>>> b[:3]#左边默认为 0array([0, 1, 2])
>>> b[3:]#右边默认为元素个数array([3, 4, 5])
>>> b[0:4:2]#下标递增2array([0, 2])

NumPy的where函数使用

np.where(condition, x, y),第一个参数为一个布尔数组,第二个参数和第三个参数可以是标量也可以是数组。

[python] view plain copy
print ?
  1. cond = numpy.array([True,False,True,False])  
  2. a = numpy.where(cond,-2,2)# [-2  2 -2  2]  
  3. cond = numpy.array([1,2,3,4])  
  4. a = numpy.where(cond>2,-2,2)# [ 2  2 -2 -2]  
  5. b1 = numpy.array([-1,-2,-3,-4])  
  6. b2 = numpy.array([1,2,3,4])  
  7. a = numpy.where(cond>2,b1,b2) # 长度须匹配# [1,2,-3,-4]  
cond = numpy.array([True,False,True,False])
a = numpy.where(cond,-2,2)# [-2  2 -2  2]
cond = numpy.array([1,2,3,4])
a = numpy.where(cond>2,-2,2)# [ 2  2 -2 -2]
b1 = numpy.array([-1,-2,-3,-4])
b2 = numpy.array([1,2,3,4])
a = numpy.where(cond>2,b1,b2) # 长度须匹配# [1,2,-3,-4]

[python] view plain copy
print ?
  1. >>> a = np.array([[1,2],[3,4],[5,6]])  
  2. >>> a[0] = [11,22]#修改第一行数组[1,2]为[11,22]。  
  3. >>> a[0][0] = 111#修改第一个元素为111,修改后,第一个元素“1”改为“111”。  
  4.   
  5. >>> a = np.array([[1,2],[3,4],[5,6]])  
  6. >>> b = np.array([[10,20],[30,40],[50,60]])  
  7. >>> a+b #加法必须在两个相同大小的数组键间运算。  
  8. array([[1122],  
  9.        [3344],  
  10.        [5566]])  
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> a[0] = [11,22]#修改第一行数组[1,2]为[11,22]。
>>> a[0][0] = 111#修改第一个元素为111,修改后,第一个元素“1”改为“111”。

>>> a = np.array([[1,2],[3,4],[5,6]])
>>> b = np.array([[10,20],[30,40],[50,60]])
>>> a+b #加法必须在两个相同大小的数组键间运算。
array([[11, 22],
       [33, 44],
       [55, 66]])

不同维数的数组直接相加显然是不允许的。但是可以用一个n行列向量和一个m列行向量构造出一个n×m矩阵

[python] view plain copy
print ?
  1. >>> a = np.array([[1],[2]])  
  2. >>> a  
  3. array([[1],  
  4.        [2]])  
  5. >>> b=([[10,20,30]])#生成一个list,注意,不是np.array。  
  6. >>> b  
  7. [[102030]]  
  8. >>> a+b  
  9. array([[112131],  
  10.        [122232]])  
  11. >>> c = np.array([10,20,30])  
  12. >>> c  
  13. array([102030])  
  14. >>> c.shape  
  15. (3,)  
  16. >>> a+c  
  17. array([[112131],  
  18.        [122232]])  
>>> a = np.array([[1],[2]])
>>> a
array([[1],
       [2]])
>>> b=([[10,20,30]])#生成一个list,注意,不是np.array。
>>> b
[[10, 20, 30]]
>>> a+b
array([[11, 21, 31],
       [12, 22, 32]])
>>> c = np.array([10,20,30])
>>> c
array([10, 20, 30])
>>> c.shape
(3,)
>>> a+c
array([[11, 21, 31],
       [12, 22, 32]])

数组和一个数字的加减乘除的运算,相当于一个广播,把这个运算广播到各个元素中去。

[python] view plain copy
print ?
  1. >>> a = np.array([[1,2],[3,4],[5,6]])  
  2. >>> a*2#相当于a中各个元素都乘以2.类似于广播。  
  3. array([[ 2,  4],  
  4.        [ 6,  8],  
  5.        [1012]])  
  6. >>> a**2  
  7. array([[ 1,  4],  
  8.        [ 916],  
  9.        [2536]])  
  10. >>> a>3  
  11. array([[FalseFalse],  
  12.        [False,  True],  
  13.        [ True,  True]])  
  14. >>> a+3  
  15. array([[45],  
  16.        [67],  
  17.        [89]])  
  18. >>> a/2  
  19. array([[0.51. ],  
  20.        [1.52. ],  
  21.        [2.53. ]])  
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> a*2#相当于a中各个元素都乘以2.类似于广播。
array([[ 2,  4],
       [ 6,  8],
       [10, 12]])
>>> a**2
array([[ 1,  4],
       [ 9, 16],
       [25, 36]])
>>> a>3
array([[False, False],
       [False,  True],
       [ True,  True]])
>>> a+3
array([[4, 5],
       [6, 7],
       [8, 9]])
>>> a/2
array([[0.5, 1. ],
       [1.5, 2. ],
       [2.5, 3. ]])

方法一:

利用查找中的方法,比如a=a[0],操作完居后,a的行数只剩一行了。

[python] view plain copy
print ?
  1. >>> a = np.array([[1,2],[3,4],[5,6]])  
  2. >>> a[0]  
  3. array([12])  
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> a[0]
array([1, 2])

方法二:

[python] view plain copy
print ?
  1. >>> a = np.array([[1,2],[3,4],[5,6]])  
  2. >>> np.delete(a,1,axis = 0)#删除a的第二行。  
  3. array([[12],  
  4.        [56]])  
  5. >>> np.delete(a,(1,2),0)#删除a的第二,三行。  
  6. array([[12]])  
  7. >>> np.delete(a,1,axis = 1)#删除a的第二列。  
  8. array([[1],  
  9.        [3],  
  10.        [5]])  
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> np.delete(a,1,axis = 0)#删除a的第二行。
array([[1, 2],
       [5, 6]])
>>> np.delete(a,(1,2),0)#删除a的第二,三行。
array([[1, 2]])
>>> np.delete(a,1,axis = 1)#删除a的第二列。
array([[1],
       [3],
       [5]])

方法三:

先分割,再按切片a=a[0]赋值。

[python] view plain copy
print ?
  1. >>> a = np.array([[1,2],[3,4],[5,6]])  
  2. >>> np.hsplit(a,2)#水平分割(搞不懂,明明是垂直分割嘛?)  
  3. [array([[1],  
  4.        [3],  
  5.        [5]]), array([[2],  
  6.        [4],  
  7.        [6]])]  
  8. >>> np.split(a,2,axis = 1)#与np.hsplit(a,2)效果一样。  
  9.   
  10. >>> np.vsplit(a,3)  
  11. [array([[12]]), array([[34]]), array([[56]])]  
  12. >>> np.split(a,3,axis = 0)#与np.vsplit(a,3)效果一样。  
转载自
https://blog.youkuaiyun.com/zhangchuang601/article/details/79626511
### 数据结构中的操作 #### 除操作 在数据库中执行除操作时,`delete` 和 `truncate` 是两种不同的方法。前者允许附加条件来精确控制哪些记录被移除[^2],而后者则用于快速清除整张表的数据而不支持任何条件。 对于实体框架(Entity Framework),可以通过调用 `Remove()` 方法并传入相应的实体对象来进行单条记录的除操作[^4]: ```csharp studentDataContext.Students.Remove(studentEntity); ``` --- #### 询操作 当涉及到字典这种常见的数据结构时,询特定键是否存在以及获取其对应是非常基础的操作之一[^5]。下面展示了一个简单的例子说明如何访问字典内的项目: ```python my_dict = {'a': 1, 'b': 2} # 获取指定键对应的 print(my_dict['a']) # 检键是否存在于字典中 if 'c' in my_dict: print("键 'c' 存在于字典中") else: print("键 'c' 不存在于字典中") ``` 上述代码片段展示了基本的找功能——通过索引来检索具体项或者验证某个关键字的存在状态。 --- #### 添加/修改操作 针对多维数组这样的复杂数据形式,在 NumPy 库的支持下能够方便地完成水平或垂直维度上的扩展工作[^3]。这里提供了一种利用 `hstack()` 函数沿横向追加新列的方式作为实例演示: 假设我们有两个初始矩阵 A 和 B ,它们分别定义如下: ```python import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) C_horizontal = np.hstack((A, B)) D_vertical = np.vstack((A, B)) print(C_horizontal) print(D_vertical) ``` 此脚本实现了既定目标:即把原始阵列按照行数匹配原则拼接起来形成更大的整体 。 同样适用于更新已有字段的内容逻辑上也遵循相似模式只是需注意覆盖原位置还是开辟新区间而已。 --- ### 总结 以上涵盖了四种核心动作的具体实现方式及其背后原理阐述。每一段落都紧密围绕着提问者所关心的主题展开讨论,并辅以实际可运行的小型示范帮助理解概念要点所在之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值