10.数组元素的增删改查
10.1 resize
函数名称 | 参数 | 说明 |
---|---|---|
resize(a, new_shape) | a:操作的数组 new_shape:返回的数组的形状,如果元素数量不够,重复数组元素来填充新的形状 | 返回指定形状的新数组 |
#resize:将元素组形状修改为新的形状,如果元素个数不够,则重复遍历元素组中的元素进行填充,如果元素组的
#多则丢弃。
import numpy as np
a = np.arange(10)
a1 = np.resize(a,(3,4))
print(a1)
a2 = np.resize(a,(2,2))
print(a2)
10.2 append
函数名称 | 参数 | 说明 |
---|---|---|
append(arr, values, axis=None) | arr:输入的数组 values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致 axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反 | 在数组的末尾添加值,返回一个一维数组 |
案例:
#append 给数组添加新元素
a = np.arange(6).reshape(2, 3)
#没有指定axis或者axis = none,则返回一维数组
a1 = np.append(a, [1, 2, 3])
print(a1)
#axis=0则按行添加,添加的value的维度要和元素组的维度一致
a2 = np.append(a, [[1,2,3]], axis=0)
print(a2)
# axis=1 按列添加,
a3 = np.append(a, [[1, 1, 1], [1, 1, 1]], axis=1)
print(a3)
10.3 insert
函数名称 | 参数 | 说明 |
---|---|---|
insert(arr, obj, values, axis) | arr:输入的数组 obj:表示索引值,在该索引值之前插入 values 值 values:要插入的值 axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反 | 沿规定的轴将元素值插入到指定的元素前 |
案例:
#insert;在指定位置添加值
#如果未指定axis ,则按照位置添加并返回一维数组
a = np.arange(6).reshape(2, 3)
a1 = np.insert(a, 1, [6])
print(a1)
#axis = 0 ,按行插入
a2 = np.insert(a , 1, [6] , axis=0)
print(a2)
#axis = 1 ,按列插入
a3 = np.insert(a, 0, [6] , axis=1)
print(a3)
a4 = np.insert(a, 1, [[6,7]], axis=1)
print(a4)
10.4 delete
函数名称 | 参数 | 说明 |
---|---|---|
delete(arr, obj, axis) | arr:输入的数组 obj:表示索引值,要删除数据的索引 axis:默认为 None,返回的是一维数组;当 axis =0 时,删除指定的行,若 axis=1 则与其恰好相反 | 删掉某个轴上的子数组,并返回删除后的新数组 |
案例:
#delte:删除指定位置元素
#一维数组:
a = np.arange(6)
a1 = np.delete(a, 1)
print(a1)
#二维数组:
a = np.arange(6).reshape(2, 3)
#如果axis不指定,则按照一维数组的位置删除元素,返回一维数组
a1 = np.delete(a, [1 ,3])
print(a1)
a2 = np.delete(a, 1, axis=0)
print(a2)
#axis =1 ,按照列删除列的元素
a3 = np.delete(a, [0,1], axis=1)
print(a3)
10.5 argwhere
返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标
案例:
#argwhere:默认返回非0元素的坐标
a = np.arange(6).reshape(2, 3)
print(np.argwhere(a))
#也可以使用布尔索引去筛选指定的元素
print(np.argwhere(a>2))
#argmax:查找数组中最大值对应的下标
#argmin:查找数组最小值对应的下标
a = np.array([[1,23,3],[2,3,4]])
print(np.argmax(a))
10.6 unique
函数名称 | 参数 | 说明 |
---|---|---|
unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None) | ar:输入的数组 return_index:如果为 True,则返回新数组元素在原数组中的位置(索引) return_inverse:如果为 True,则返回原数组元素在新数组中的位置(逆索引) return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数 | 删掉某个轴上的子数组,并返回删除后的新数组 |
案例1:返回唯一元素的索引
#unique:数组元素去重
a =np.array([[1,23,3],[2,3,4]])
#默认去重
print(np.unique(a))
#return_index为True返回新数组在元素组中的位置索引
new, idx = np.unique(a, return_index=True)
print(new, idx)
#return_inverse为true返回原数组在新数组的位置
new, inv = np.unique(a, return_inverse=True)
print(new, inv)
#return_counts为true返回新数组中在原数组中出现的次数
new, counts = np.unique(a, return_counts=True)
print(new, counts)
#按照行列去重
a = np.array([[1,2],[3,4],[1, 2]])
print(np.unique(a,axis=0))
print(np.unique(a,axis=1))
11.1 amin() 和 amax()
-
计算数组沿指定轴的最小值与最大值,并以数组形式返回
-
对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向
案例:
#amin:amax;统计数组的最小值和最大值
array_one = np.array([[1,23,4,5,6],[1,2,333,4,5]])
#axis=0,按照垂直方向查找最小值和最大值
print(np.amin(array_one,axis=0))
print(np.amax(array_one,axis=0))
#axis =1 :按照水平方向查找最小值和最大值
print(np.amax(array_one,axis=1))
print(np.amin(array_one,axis=1))
#如果axis =None或者不指定,按照一维数组查找
print(np.amax(array_one))
print(np.amin(array_one))
11.2 ptp()
-
计算数组元素中最值之差值,即最大值 - 最小值
-
对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向
-
#ptp arr = np.array([[1, 2, 3], [4, 5, 6]]) #axis=None或者不指定按照一维数组处理,查找最大值最小值,然后最大值减去最小值 print(np.ptp(arr)) #axis=0,按照垂直方向查找最大值最小值 print(np.ptp(arr, axis=0)) #axis=1,按照水平方向查找最大值最小值 print(np.ptp(arr, axis=1))
11.3 median()
用于计算中位数,中位数是指将数组中的数据按从小到大的顺序排列后,位于中间位置的值。如果数组的长度是偶数,则中位数是中间两个数的平均值。
#meidian()中位数,先进行排序如果数组长度为奇数,返回数值的中间元素,
# 如果为偶数返回中间两个数的平均值
#axis =None或者不指定,按照一维数组求中位数
#axis =1,按照水平方向
#axis=0,按照垂直方向
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(np.median(arr))
print(np.median(arr, axis=0))
print(np.median(arr, axis=1))
11.5 average()
加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数);根据在数组中给出的权重,计算数组元素的加权平均值。该函数可以接受一个轴参数 axis,如果未指定,则数组被展开为一维数组。
$$
加权平均值=\dfrac{∑_{i=1}^n(x_i⋅w_i)}{∑_{i=1}^nw_i}
$$
其中 xi是数组中的元素,wi是对应的权重。
如果所有元素的权重之和等于1,则表示为数学中的期望值。
#average:求加权平均值,数组元素乘以对应的权重之和除以所有权重之和
a = np.arange(6)
w = np.array([0.1, 0.2,0.3,0.1,0.2,0.1])
print(np.average(a,weights=w))
11.6 var()
在 NumPy 中,计算方差时使用的是统计学中的方差公式,而不是概率论中的方差公式,主要是因为 NumPy 的设计目标是处理实际数据集,而不是概率分布。
np.var 函数默认计算的是总体方差(Population Variance),而不是样本方差(Sample Variance)。
总体方差:
对于一个总体数据集 X={x1,x2,…,xN},总体方差的计算公式为:
$$
σ^2=\dfrac{1}{N}∑_{i=1}^N(x_i−μ)^2
$$
其中:
-
N是总体数据点的总数。
-
μ是总体的均值。
-
#var:方差 #var:默认使用总体方差 #ddof=1表示样本方差 a = np.arange(6) print(np.var(a)) print(np.var(a,ddof=1))
11.7 std()
标准差是方差的算术平方根,用来描述一组数据平均值的分散程度。若一组数据的标准差较大,说明大部分的数值和其平均值之间差异较大;若标准差较小,则代表这组数值比较接近平均值
#std:标准方差,就是方差开平方 print(np.std(a)) print(np.std(a, ddof=1))