学习内容:
一、数组的合并与分割
(一)数组的合并操作
1. concatenate((数组1,数组2,…),axis=[默认0:列数同,纵向合并 | 1:行数同,横向合并 | None: 合并为一维数组)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
np.concatenate((a, b), axis = 0)
#输出:array([[1, 2],
# [3, 4],
# [5, 6],
# [7, 8]])
np.concatenate((a,b), axis = 1)
#输出:array([[1, 2, 5, 6],
# [3, 4, 7, 8]])
np.concatenate((a,b), axis = None)
#输出:array([1, 2, 3, 4, 5, 6, 7, 8])
np.concatenate(a, None)
#输出:array([1, 2, 3, 4])
2. vstack((数组1, 数组2,…) ) 对列数相同的数组,纵向合并。等同于 concatenate 的 axis=0
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
np.vstack((a, b))
#输出:array([[1, 2, 3, 4],
# [5, 6, 7, 8]])
3. hstack((数组1, 数组2)) 对行数相同的数组,横向合并。等同于 concatenate 的 axis=1
a = np.array([[1,2],[3,4]])
b = np.array([[5],[6]])
np.hstack((a, b))
#输出:array([[1, 2, 5],
# [3, 4, 6]])
(二)数组的分割操作
split(目标数组, 索引或区段(如为整数则N平均分为N段), axis = 轴向(0默认纵向分割, 1横向分割)
1. 平均拆分为N段 (要求元素个数能被N整除,不能整除将报错)
a = np.array([0,1,2,3,4,5])
np.split(a, 3) # 目标数组为1维,同np.split(a, 3, axis = 0) 或 函数hsplit(a, 3)
#输出:[array([0, 1]), array([2, 3]), array([4, 5])]
b = np.array((a,a,a))
np.split(b, 3, 0) # 目标数组为2维,同函数vsplit(b, 3)
#输出:[array([[0, 1, 2, 3, 4, 5]]),
# array([[0, 1, 2, 3, 4, 5]]),
# array([[0, 1, 2, 3, 4, 5]])]
np.split(b, 3, 0) # 目标数组为2维,同函数hsplit(b, 3)
#输出:[array([[0, 1], [0, 1], [0, 1]]),
# array([[2, 3], [2, 3], [2, 3]]),
# array([[4, 5], [4, 5], [4, 5]])]
2. 按区段[a, b, c]拆分(将数组拆分为[ :a] [a:b] [b:c] [c:]的若干数组)
a = np.array([ 7, 6, 1, 5, 17, 3, 8, 18])
np.split(a, indices_or_sections=[3, 5, 8])
#输出:[array([7, 6, 1]), array([ 5, 17]), array([ 3, 8, 18]), array([], dtype=int64)]
b = np.array([[0,1,2],[0,1,2],[0,1,2],[0,1,2]])
np.split(b, [1,3], axis = 0) #同函数vsplit(b, [1,3])
#输出:[array([[0, 1, 2]]), array([[0, 1, 2],[0, 1, 2]]), array([[0, 1, 2]])]
np.split(b, [1,3], 1) #同函数hsplit(b, [1,3])
#输出:[array([[0],[0],[0],[0]]),
# array([[1, 2],[1, 2],[1, 2],[1, 2]]),
# array([], shape=(4, 0), dtype=int64)]
二、数组的聚合运算
(一)单一维度聚合运算
1. 求和运算(sum(目标数组 [,求和位置])
a = np.arange(7)
np.sum(a) # 等效a.sum(),计算所有元素的和。输出21
#计算指定位置的数值和,以下输出3
np.sum(a, where=[True, True, True, False, False, False, False])
#计算条件表达式为真的数值和,以下计算数组中偶数和,输出12
np.sum(a, where=a%2==0)
2. 查找最小值(min(目标数组 [,位置]))、最大值(max(目标数组 [,位置]))
b = np.array([6, 11, 10, 21, 10])
np.min(b) #等效b.min(),输出 6
np.max(b) #等效b.max(), 输出 21
3. 求均值(mean(目标数组 [,位置]))
b = np.array([6, 11, 10, 21, 10])
np.mean(b) #等效b.mean(),输出 11.6
4. 百分位数(percentile(a目标数组, q=百分位值)
a = np.array([49, 48, 18, 39, 34, 14, 35, 41, 43, 40])
np.percentile(a,q=75) #输出42.5
(二)多维度聚合运算
1. 求和(sum(目标数组 [, 求和位置, 轴向(axis=0纵向 | 1横向 | None按1维方式默认)]))
a = np.arange(8).reshape(2,4)
#a结构:array([[0, 1, 2, 3],
# [4, 5, 6, 7]])
np.sum(a, axis=0) # 纵向数值相加,返回1维数组,元素个数与原数组列数相同
#输出:array([4., 6., 8., 10.])
np.sum(a, axis=1, dtype=int) # 橫向数值相加,返回1维数组,元素个数与原数组行数相同
#输出:array([6, 22])
np.sum(a, axis=None) #所有元素值相加,返回一个值
#输出:28
2. 返回最小值(min)、最大值(max)
a = np.arange(8).reshape(2,4)
np.min(a,axis=0) # 输出:array([0, 1, 2, 3])
np.max(a,axis=1) # 输出:array([3, 7])
3. 求均值(mean(目标数组 [, 轴向]))
a = np.arange(16).reshape(4,4)
'''a结构:
array([[10, 11, 12, 13],
[14, 15, 16, 17]])'''
a.mean(axis=0)
#输出:array([6., 7., 8., 9.])
a.mean(axis=1)
#输出:array([11.5, 15.5])
np.mean(a,axis=None)
#输出:13.5
4. 求百分位数(percentile(目标数组, q=百分位值 [,axis=0纵向 | 1横向 | None按1维方式默认)
a = np.array([49, 48, 18, 39, 34, 14, 35, 41, 43, 40]).reshape(2,5)
'''a的结构:
array([[49, 48, 18, 39, 34],
[14, 35, 41, 43, 40]])'''
np.percentile(a,q=75) #输出:42.5
np.percentile(a,q=50,axis=0)
#输出:array([31.5, 41.5, 29.5, 41. , 37. ])
np.percentile(a,q=50,axis=1)
#输出:array([39., 40.])
三、其他操作
1. 返回最小值、最大值索引号(argmin(目标数组 [, axis=0纵向 | 1横向 | None视为1维数组默认))
argmax(参数同argmin)
a = np.arange(6).reshape(2,3) + 10
'''a结构:
array([[10, 11, 12],
[13, 14, 15]])'''
np.argmax(a) #输出 5
np.argmin(a,axis=0)
#输出:array([0, 0, 0])
np.argmax(a,axis=1)
#输出:array([2, 2])
2. 打乱数组排序(np.random.shuffle(目标数组))注:目标数组会变
a = np.arange(5)+15
#a结构:array([15, 16, 17, 18, 19])
np.random.shuffle(a)
#a元素顺序随机更改:array([18, 15, 16, 19, 17])
3. 数组排序(sort(目标数组 [, axis=0纵向 | 1横向默认 | None视为1维排)
a = np.array([[1,6,4],[5,3,7]])
'''a结构:
array([[1, 6, 4],
[5, 3, 7]])'''
np.sort(a, axis=0)
#输出:array([[1, 3, 4],
# [5, 6, 7]])
np.sort(a) #同np.sort(a, axis=1)
#输出:array([[1, 4, 6],
# [3, 5, 7]])
np.sort(a, axis=None)
#输出:array([1, 3, 4, 5, 6, 7])