Numpy基础02
目录
1.数组操作
1.1改变维度
1.2遍历数组
1.2.1nditer(array,order)
1.2.1.1flags 参数
1.2.1.2op_flags 参数
1.3平展数组
1.3.1flatten(order='C')
1.3.2ravel()
1.4数组转置
1.4.1transpose()
1.4.2T
1.5分割数组
1.5.1hsplit(arr,indices_or_section)
1.5.2vsplit(arr,indices_or_section))
1.6连接数组
1.6.1hstack()
1.6.2vstack()
1.7删除维度
1.8增加维度
2.数组元素的增删改查
2.1resize(arr, new_shape)
2.2append(arr, values, axis=None)
2.3insert(arr, obj, values, axis)
2.4delete(arr, obj, axis)
2.5argwhere(arr)
2.6unique
3.统计函数
3.1amin(arr,axis=None)和amax(arr,axis=None)
3.2ptp(arr,axis=None)
3.3median(arr,axis=None)
3.4mean(arr,axis=None)
3.5average(arr,weights,axis=None)
3.6var(arr,ddof=0,axis=None)
3.6.1var(arr,axis=None)
3.6.2var(arr,ddof=1,axis=None)
3.7std(arr,axis=None,ddof=0)
1.数组操作
1.1改变维度
reshape()
1.2遍历数组
flat:数组属性,是迭代器,用于遍历所有元素。
arr = np.arange(0,10).reshape(2,5)
for i in arr.flat:print(i,end=" ")
1.2.1nditer(array,order)
nditer 是 NumPy 中的迭代器对象,用于高效地遍历多维数组。
arr = np.array([[1, 2, 3], [4, 5, 6]])for item in np.nditer(arr,order="F"):print(item)
print("-----")
for item in np.nditer(arr,order="C"):print(item)
1.2.1.1flags 参数
用于指定迭代器的额外行为。
multi_index:返回每个元素的索引
external__loop:返回一维数组,减少函数调用的次数。
arr = np.array([[1, 2, 3], [4, 5, 6]])
item = np.nditer(arr,flags=['multi_index'])
for i in item:print(i,item.multi_index)# print(f"Element: {i}, Index: {i.multi_index}")item2 = np.nditer(arr,flags=['external_loop'],order="F")
for i in item2:print(i)item3 = np.nditer(arr,flags=['external_loop'],order="C")
for i in item3:print(i)
注意:flags的参数是列表或元组
1.2.1.2op_flags 参数
用于指定操作数
- readonly:只读操作数
- readwrite:读写操作数
- writeonly:只写操作数
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in np.nditer(arr, op_flags=['readwrite']):x[...] = 2 * x
print(arr)
1.3平展数组
1.3.1flatten(order='C')
数组属性,返回数组以一维形式的副本
参数
order: 指定数组的展开顺序。
-
'C'
:按行优先顺序展开(默认)。 -
'F'
:按列优先顺序展开。 -
'A'
:如果原数组是 Fortran 连续的,则按列优先顺序展开;否则按行优先顺序展开。 -
'K'
:按元素在内存中的顺序展开。
arr = np.arange(0,10).reshape(2,5)
print(arr.flatten(order="F"))
print(arr.flatten(order="C"))
1.3.2ravel()
返回原数组的一个视图(view)(浅拷贝)
arr = np.arange(0,6).reshape(2,3)
x=arr.ravel()
x[-1]=100
print(arr)
1.4数组转置
1.4.1transpose()
arr = np.arange(0,6).reshape(2,3)
print(arr.transpose())
1.4.2T
数组属性
arr = np.arange(0,6).reshape(2,3)
print(arr.transpose())
1.5分割数组
1.5.1hsplit(arr,indices_or_section)
列分割
arr = np.arange(0,9).reshape(3,3)
print(arr)
print('列分割1:',np.hsplit(arr,[1,2]))
print('列分割2:',np.hsplit(arr,[2]))
1.5.2vsplit(arr,indices_or_section))
行分割
arr = np.arange(0,9).reshape(3,3)
print(arr)
print('行分割1:',np.vsplit(arr,[1,2]))
print('行分割2:',np.vsplit(arr,[2]))
1.6连接数组
1.6.1hstack()
元组,列表,或者numpy数组,返回numpy的数组
按水平顺序堆叠序列中数组(列方向)
注意:参与连接的数组,行数一致
arr = np.arange(0, 6).reshape(2,3)
arr2 = np.arange(6.1, 10.1).reshape(2,2)
print(np.hstack((arr,arr2)))lt1=[1,2,3]
lt2=[4,5,6]
print(np.hstack((lt1,lt2)))arr2=np.arange(8, 10).reshape(1,2)
arr3 = np.arange(0, 6).reshape(1,6)
tup_arr2=tuple(arr2)
tup_arr3=tuple(arr3)
print(np.hstack((tup_arr2,tup_arr3)))
1.6.2vstack()
元组,列表,或者numpy数组,返回numpy的数组
按垂直方向堆叠序列中数组(行方向)
注意:参与连接的数组,列数一致
arr = np.arange(0, 6).reshape(3,2)
arr2 = np.arange(6.1, 10.1).reshape(2,2)
print(np.vstack((arr,arr2)))
1.7删除维度
squeez(arr,axis)
删除的指定维度的维度值必须为1
arr = np.arange(0,20).reshape(4,5,1)
print('原数组:\n', arr)
arr1 = np.squeeze(arr,axis=2)
print('删除后:\n',arr1)
1.8增加维度
expand_dims(arr, axis)
axis:新轴插入的位置
arr = np.arange(0, 6).reshape(2,3)
print(arr)
print(np.expand_dims(arr,axis=0))
2.数组元素的增删改查
2.1resize(arr, new_shape)
返回的修改后的数组
new_shape:在二维数组中,[cow,col],元素数量:cow*col
若元素数量不够,重复数组元素来填充新的形状
若元素数量超出范围,截断范围外数组元素
arr = np.arange(0,9).reshape(3,3)
print('',np.resize(arr,[3,4]))
print(np.resize(arr,[2,2]))
2.2append(arr, values, axis=None)
values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致(局限)
axis:默认为 None,返回的是一维数组;
当 axis =0 时,追加的值会被添加到行,而列数保持不变,axis=1 与其相反
arr = np.arange(0,6).reshape(2,3)
value1=np.array([10])
value2=np.array([[10,11,12],[13,14,15]])
value3=np.array([100,110,120])
print("axis=None时",np.append(arr,value1),sep="\n")
print("axis=0时",np.append(arr,value2,axis=0),sep="\n")
print("axis=1时",np.append(arr,value2,axis=1),sep="\n")
2.3insert(arr, obj, values, axis)
obj:表示索引值,在该索引值之前插入 values 值;
value:插入的元素,可广播
axis:默认为 None,返回的是一维数组;
当 axis =0 时,追加的值会被添加到行,而列数保持不变,axis=1 与其相反
arr = np.arange(0,6).reshape(2,3)
value1=np.array([10,11,12])
value2=np.array([20,21])
value3=np.array([20])
print(np.insert(arr,1,value1,axis=0))
print(np.insert(arr,2,value2,axis=1))
print(np.insert(arr,2,value3,axis=1))
2.4delete(arr, obj, axis)
obj:表示索引值,在该索引值之前删除 values 值
axis:默认为 None,返回的是一维数组;
当 axis =0 时,删除指定的行,若 axis=1,删除指定的列
arr = np.arange(0,12).reshape(3,4)
print("原二维数组:",arr,sep="\n")
print("删除行:",np.delete(arr,[2],axis=0),sep="\n")
print("删除列:",np.delete(arr,[1],axis=1),sep="\n")
2.5argwhere(arr)
返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成非 0 元素的索引坐标
arr=np.array([[1,2,3],[0,4,5]])
print(np.argwhere(arr))
2.6unique
unique(arr, return_index=False, return_inverse=False, return_counts=False, axis=None)
return_index:如果为 True,则返回新数组元素在原数组中的位置(索引)
return_inverse:如果为 True,则返回原数组元素在新数组中的位置(逆索引)
return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数
功能:删掉某个轴上的子数组,并返回删除后的新数组
用途:词频统计
arr = np.array([[1, 2], [2, 3], [1, 2]])
arr_new, index, inverse, count = np.unique(arr, return_index=True, return_inverse=True, return_counts=True)
print("去重后:", arr_new, sep="\n")
print("出现次数统计:", count, sep="\n")
print("新数组元素在原数组的首次出现的索引:", index, sep="\n")
print("原数组此位置元素在新数组中的索引:", inverse, sep="\n")
3.统计函数
3.1amin(arr,axis=None)和amax(arr,axis=None)
计算数组沿指定轴的最小值与最大值,并以数组形式返回
对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向,axis默认值为None,amin,amax求整体的最值
arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print('数组中最小值\n',np.amin(arr))
print('列最小值\n',np.amin(arr,axis=0))
print('行最小值\n',np.amin(arr,axis=1))
print('数组中最大值\n',np.amax(arr))
print('列最大值\n',np.amax(arr,axis=0))
print('行最大值\n',np.amax(arr,axis=1))
3.2ptp(arr,axis=None)
计算数组元素中最值之差值,即最大值 - 最小值
对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向,axis默认值为None,求整体的差值
arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print(np.ptp(arr))
print(np.ptp(arr,axis=0))
print(np.ptp(arr,axis=1))
3.3median(arr,axis=None)
用于计算中位数,中位数是指将数组中的数据按从小到大的顺序排列后,位于中间位置的值。如果数组的长度是偶数,则中位数是中间两个数的平均值。
arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print(np.median(arr))
print(np.median(arr,axis=0))
print(np.median(arr,axis=1))
3.4mean(arr,axis=None)
沿指定的轴,求数组中元素的算术平均值
arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print(np.mean(arr))
print(np.mean(arr,axis=0))
print(np.mean(arr,axis=1))
3.5average(arr,weights,axis=None)
加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数);根据在数组中给出的权重,计算数组元素的加权平均值。
arr = np.array([[1, 2], [3, 4],[5,6]])
weights = np.array([[0.4, 0.3], [0.2, 0.2],[0.8,0.57]])
print(np.average(arr, weights=weights))
print(np.average(arr, weights=weights,axis=0))
print(np.average(arr, weights=weights,axis=1))
3.6var(arr,ddof=0,axis=None)
在 NumPy 中,计算方差时使用的是统计学中的方差公式,而不是概率论中的方差公式,主要是因为 NumPy 的设计目标是处理实际数据集,而不是概率分布。
np.var 函数默认计算的是总体方差(Population Variance),而不是样本方差(Sample Variance)。
总体方差:
对于一个总体数据集 X={x1,x2,…,xN},总体方差的计算公式为:
N是总体数据点的总数。
μ是总体的均值。
3.6.1var(arr,axis=None)
arr = np.array([[1, 2], [3, 4],[5,6]])
print(np.var(arr))
print(np.var(arr,axis=0))
print(np.var(arr,axis=1))
样本方差:
对于一个样本数据集 X={x1,x2,…,xn},样本方差 的计算公式为:
其中:
n是样本数据点的总数。
xˉ是样本的均值。
在样本数据中,样本均值的估计会引入一定的偏差。通过使用 n−1作为分母,可以校正这种偏差,得到更准确的总体方差估计。
3.6.2var(arr,ddof=1,axis=None)
arr = np.array([[1, 2], [3, 4],[5,6]])
print(np.var(arr,ddof=1))
print(np.var(arr,ddof=1,axis=0))
print(np.var(arr,ddof=1,axis=1))
3.7std(arr,axis=None,ddof=0)
标准差是方差的算术平方根,用来描述一组数据平均值的分散程度。若一组数据的标准差较大,说明大部分的数值和其平均值之间差异较大;若标准差较小,则代表这组数值比较接近平均值。
arr = np.array([[1, 2], [3, 4],[5,6]])
print(np.std(arr))
print(np.std(arr,axis=0))
print(np.std(arr,axis=1))