import numpy as np
L = np.random.random(100)
L
array([0.14707817, 0.51538313, 0.50141282, 0.63780797, 0.51842999,
0.89482605, 0.24431981, 0.43637874, 0.29556134, 0.79383015,
0.34645964, 0.09524615, 0.83537628, 0.20368028, 0.36932017,
0.88467668, 0.07961524, 0.25556124, 0.04033986, 0.89860064,
0.9501519 , 0.79662502, 0.64376714, 0.6662608 , 0.15145608,
0.21783231, 0.01826994, 0.98950297, 0.77486522, 0.216739 ,
0.13108977, 0.11537484, 0.27995894, 0.80551014, 0.53778255,
0.30642786, 0.18632511, 0.14216139, 0.82247982, 0.81539803,
0.91862768, 0.11738173, 0.47618321, 0.36015143, 0.51775464,
0.65329679, 0.13934228, 0.71476716, 0.38998168, 0.72976681,
0.05740673, 0.42992562, 0.31316227, 0.27995423, 0.21397666,
0.17879832, 0.27598877, 0.33353482, 0.95716778, 0.73407079,
0.19703397, 0.18999253, 0.27216992, 0.87819192, 0.95979191,
0.98490439, 0.712449 , 0.6107481 , 0.00880301, 0.18368437,
0.59232278, 0.46047004, 0.20959812, 0.01904767, 0.83639219,
0.43005139, 0.75190676, 0.5919251 , 0.73662702, 0.7993019 ,
0.38905968, 0.80720813, 0.96361155, 0.57007827, 0.88656883,
0.82757261, 0.31865827, 0.88427251, 0.02162041, 0.62311024,
0.5565138 , 0.62780294, 0.02192694, 0.63092492, 0.49980479,
0.40503676, 0.15458216, 0.81448693, 0.19060075, 0.29262892])
sum(L)
48.26460412186582
np.sum(L)
48.26460412186582
numpy运算和普通运算的时间差异
big_array = np.random.random(1000000)
%%time
sum(big_array)
Wall time: 120 ms
499611.8561920539
%%time
np.sum(big_array)
Wall time: 1.97 ms
499611.8561920686
#求最小值
np.min(big_array)
1.3799003756309602e-06
#求最大值
np.max(big_array)
0.9999983991993785
对二维矩阵的聚合运算
X = np.arange(16).reshape(4, -1)
X
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
np.sum(X)
120
np.sum(X, axis = 0)
#压缩行
array([24, 28, 32, 36])
np.sum(X, axis = 1)
#压缩列
array([ 6, 22, 38, 54])
np.prod(X)
#计算矩阵中每个元素相乘的结果
0
np.prod(X + 1)
2004189184
#求平均值
np.mean(X)
7.5
#求中位数
np.median(X)
7.5
#均值受到偏离大的样本点影响较大
v = np.array([1, 1, 2, 2, 10])
np.mean(v)
3.2
#而中位数则能反映平均水平
np.median(v)
2.0
百分位点
np.percentile(big_array, q = 50)
# 50%的数都小于下面这个数
0.4990736912225572
np.percentile(big_array, q = 100)
#即最大值
0.9999983991993785
#我们通常关心这几个点 0, 25, 50, 75, 100
for q in [0, 25, 50, 75, 100]:
print(np.percentile(big_array, q))
1.3799003756309602e-06
0.24959401991015592
0.4990736912225572
0.7497814353970869
0.9999983991993785
#求方差
np.var(big_array)
0.08341467772921009
#求标准差
np.std(big_array)
0.28881599285567633
#取一个正态分布的数组来验证
x = np.random.normal(0, 1, size = 1000000)
np.mean(x)
0.0009296253334981052
np.var(x)
1.0029614787797727
np.std(x)
1.001479644715644
索引
np.min(x)
-5.512127809237685
np.argmin(x)
#最小值在数组中的位置
117517
x[117517]
-5.512127809237685
np.max(x)
4.884184185192495
np.argmax(x)
409986
x[409986]
4.884184185192495
排序和使用索引
x = np.arange(16)
x
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
#先进行乱序操作
np.random.shuffle(x)
x
array([10, 4, 2, 7, 12, 1, 13, 8, 0, 14, 15, 3, 11, 5, 9, 6])
np.sort(x)
#并没有改变x这个数组本身
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
x.sort()
x
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
对二维矩阵的随机排序
X = np.random.randint(20, size = (4, 4))
X
array([[11, 15, 3, 19],
[ 9, 4, 13, 16],
[ 6, 17, 8, 10],
[16, 13, 1, 16]])
np.sort(X)
#结果是每一行按照顺序进行排序
array([[ 3, 11, 15, 19],
[ 4, 9, 13, 16],
[ 6, 8, 10, 17],
[ 1, 13, 16, 16]])
np.sort(X, axis = 1)
array([[ 3, 11, 15, 19],
[ 4, 9, 13, 16],
[ 6, 8, 10, 17],
[ 1, 13, 16, 16]])
np.sort(X, axis = 0)
array([[ 6, 4, 1, 10],
[ 9, 13, 3, 16],
[11, 15, 8, 16],
[16, 17, 13, 19]])
x
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
np.random.shuffle(x)
x
array([14, 0, 8, 1, 11, 13, 9, 6, 15, 12, 5, 7, 4, 3, 2, 10])
np.argsort(x)
#将乱序的x中数字按照索引进行排序
array([ 1, 3, 14, 13, 12, 10, 7, 11, 2, 6, 15, 4, 9, 5, 0, 8],
dtype=int64)
numpy.partition()
np.partition(x, 5)
#比5小的数字放在5的左边,比5大的数字放在右边,左右的结果仍然是乱序的
array([ 3, 2, 4, 1, 0, 5, 9, 6, 8, 7, 10, 12, 15, 13, 11, 14])
#也支持argpartition(),返回的是索引值
np.argpartition(x, 5)
array([13, 14, 12, 3, 1, 10, 6, 7, 2, 11, 15, 9, 8, 5, 4, 0],
dtype=int64)
#二维数组也支持索引
X
array([[11, 15, 3, 19],
[ 9, 4, 13, 16],
[ 6, 17, 8, 10],
[16, 13, 1, 16]])
np.argsort(X)
array([[2, 0, 1, 3],
[1, 0, 2, 3],
[0, 2, 3, 1],
[2, 1, 0, 3]], dtype=int64)
np.partition(X, 2)
array([[ 3, 11, 15, 19],
[ 4, 9, 13, 16],
[ 6, 8, 10, 17],
[ 1, 13, 16, 16]])
np.argpartition(X, 2, axis = 1)
array([[2, 0, 1, 3],
[1, 0, 2, 3],
[0, 2, 3, 1],
[2, 1, 0, 3]], dtype=int64)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix