2. N维数组对象
2.6 数组切分
切分就是把一个数组切成多个
先生成一个5x6的二维数组,数组里的元素为[0,20)的随机数
2.6.1 水平方向上的切分 hsplit()
水平方向上切分切的是列标,列数是从0开始的
想象一下切东西,切一刀分成了两部分
在第一列前切一刀,将第0列和后面的分开了,这时候成了两部分;
在第二列前切一刀,将第1列和后面的又分开了,这时候就成了3部分
第8列前切一刀,而这里只有第5列,这一刀切的是空的,所以这里有个空元组
2.6.2 垂直方向的切分 vsplit()
垂直方向上的切分,相当于切行标
hsplit和vsplit只适合于二维数组
2.6.3 split()方法
split方法可以切分任意维度的数组
nd1 是一个三维数组,2x3x4格式,元素为[0,20)的随机整数,axis表示维度
切第0个维度,第0个维度只有0,1两部分,在第1个部分前切一刀,然后在第2个部分前切一刀,但是这里没有第2部分,所以有1个元组为空,切两刀有3个模块
将维度变为第一维度axis=1
2.7 副本
首先要清楚一个概念:浅拷贝和深拷贝
p中有一个变量a,p中存的是a的地址a1,p’拷贝的时候,拷贝的只是地址,这叫浅拷贝,浅拷贝修改a1’,a中不会
发生变化,显示的内容还是a
p’‘是深拷贝,将变量a中的内容复制并新创了一个存储空间a’,修改a1’’,会修改a’的内容,显示的内容就是a’
相互赋值直接修改元素
产生副本是一种浅拷贝,并没有修改原有数据
由列表创建数组,首先会把列复制出一个副本,然后把副本中的内容类型统一化,然后再存入数组
堆操作
向量:
一个一维数组中有n个元素,我们成这个一维数组是一个n空间维行向量,
一个n行一列的二维数组我们称为一个n维空间的列向量vstack将一个一维数组转化成一个列向量
hstack把任意一个数组转成行向量
2.8 聚合
聚合操作指的就是对数组内部的数据进行某些特征(比如:均值、方差等)的求解
常见的聚合操作:
Function Name | NaN-safe Version | Description |
---|---|---|
np.sum | np.nansum | Compute sum of elements |
np.prod | np.nanprod | Compute product of elements |
np.mean | np.nanmean | Compute mean of elements |
np.std | np.nanstd | Compute standard deviation |
np.var | np.nanvar | Compute variance |
np.min | np.nanmin | Find minimum value |
np.max | np.nanmax | Find maximum value |
np.argmin | np.nanargmin | Find index of minimum value |
np.argmax | np.nanargmax | Find index of maximum value |
np.median | np.nanmedian | Compute median of elements |
np.percentile | np.nanpercentile | Compute rank-based statistics of elements |
2.8.1 常见的聚合操作
首先先创建一个一维数组,元素个数为10,每个元素[0,20)的一个随机整数
- sum()求和
两种方式,同样的效果
- prod()求积
- mean()求均值
- std()求标准差、var()求方差
一列数:a1,a2,…,an
方差:m = (a1+a2+…+an)/n var = [(a1-m)2+…+(an-m)2]/n
标准差:std = var^0.5
标准差和方差反映的是这列数据的稳定性,方差或者标准差越大数据越不稳定,反之越稳定
- min()、max()、argmin()、argmax()求最值
- media()和percentile()
中位数:数组从小到大排排序
2 3 3 5 9 10 13 15 18 18
如果是偶数个取中间两个数的平均值,如果是奇数个取中间那个数百分比位数: 比如50,表示50%,这组数的中间位置的数的大小是9.5,也就是中位数的值;
60,表示60% ,这组数60%的位置的数的大小该是11.2
2.8.2 Nan-safe版的聚合操作
numpy中的nan
那么这个nan怎么进行聚合操作呢?求和,求平均直接忽略跳过就行了
2.8.3 多维数组聚合
1 普通聚合
就是把数组中所有数据聚合在一起,最终计算出这个数组的某种数据内部特征,是一个常数
把所有元素相加或者求平均值
这是一个3x4的二维数组
2x3x4的三维数组也是一样
2 指定维度聚合
axis参数可以指定对哪个维度进行聚合
指定维度聚合就是把axis指定的那的维度的子元素聚合在一起,axis值等于哪个维度,这个维度就会消失,取而代之的是这个维度上的子元素聚合的结果
首先看一下这个数组,这是一个3x4的二维数组
- 对第0个维度进行聚合,加操作
对下标进行相加 比如: 15+9+2 =26- 对第0个维度进行聚合,求最大值
- 对第1个维度进行聚合,求和,最大值
15+9+2+17 =43
[15, 9, 17, 2]中最大值为17
这是一个2x3x4的三维数组
- 第0个维度时
聚合求相加,为对应的下标的和
- 第一个维度时
聚合求相加,
这个时怎么相加得到的结果呢?第一个维度下,有3个子块
三个子块对应的下标相加
- 第2个维度时
聚合求相加,
这个又是怎么得到的呢?
11+0+11+17=39
最后变成了一个2x3的二维数组
思考题:给定一个4维数组,如果求最后两个维度的和
这是一个2x3x4x5的四维数组,元素为[0,50)之间的随机整数
提示是这句话:axis参数可以指定对哪个维度进行聚合
指定维度聚合就是把axis指定的那的维度的子元素聚合在一起,axis值等于哪个维度,这个维度就会消失,取而代之的是这个维度上的子元素聚合的结果
首先分析一下
法一:取最后一个维度,取两次
法二:取倒数两个维度