北京朝阳区做网站竞价 推广
元素添加
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]]