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)

posted on 2022-04-03 21:00  饮冰未  阅读(251)  评论(0编辑  收藏  举报