Python 数据分析— Numpy 基本操作(下)


学习内容:

一、数组的合并与分割

(一)数组的合并操作
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])
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fjwangxi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值