Python3基础语法02|用NumPy代替list

1.NumPy是什么

  1. 是Python中超级有名的第三方库,更是其他有名的库的基础库(如Scipy、Pandas)。
  2. 主要用NumPy来定义数组,快速进行数组操作。

2.为什么要使用NumPy而不是list

1.虽然Python数组结构中的列表list实际上就是数组,但是列表list保存的是对象的指针,list中的元素在系统内存中是分散存储的,例如[0,1,2]需要3个指针和3个整数对象,浪费内存和计算时间。

2.NumPy数组存储在一个均匀连续的内存块中,访问更快;NumPy中的矩阵计算可以采用多线程的方式,计算更快。

3.NumPy的使用

1.创建数组

维数是秩(rank),每一个线性数组是轴(axes)

import numpy as np  # 通常喜欢将numpy用np表示
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6]])
b[0, 2] = 10  # 更改3为10
print(a.shape)  # a的数组大小
print(b.shape)  # b的数组大小
print(b)

结果:
(3,)
(2, 3)
[[ 1  2 10]
 [ 4  5  6]]

2.结构数组

如果我们需要实现C语言里的struct结构体,应该如何用NumPy定义呢?

import numpy as np
persontype = np.dtype({'names': ['name', 'age', 'chinese', 'math', 'english'],
                       'formats': ['S32', 'i', 'i', 'i', 'i']})  # 数据名称及类型
peoples = np.array([('Rahcel', '18', '99', '80', '77'), ('Alice', '20', '95', '87', '73')], dtype=persontype)  # 数据元素
ages = peoples[:]['age']  # 取出age
chineses = peoples[:]['chinese']
print(np.mean(ages))  # 求平均值
print(np.mean(chineses))

结果:
19.0
97.0

用Numpy进行数据运算是不是超级方便嘿嘿

3.ufunc运算

universal function的缩写,对数组元素进行函数操作,基于C语言实现,运算速度超快的哦

import numpy as np

x1 = np.arange(1, 11, 2)  # 等差数组,步长为2
x2 = np.linspace(1, 9, 5)  # 等差数组,共有5个元素

print(x1)
print(x2)

结果:
[1 3 5 7 9]
[1. 3. 5. 7. 9.]

# 加减乘除、n方、取余
print(np.add(x1, x2))
print(np.subtract(x1, x2))
print(np.multiply(x1, x2))
print(np.divide(x1, x2))
print(np.power(x1, x2))
print(np.remainder(x1, x2))

结果:
[ 2.  6. 10. 14. 18.]
[0. 0. 0. 0. 0.]
[ 1.  9. 25. 49. 81.]
[1. 1. 1. 1. 1.]
[1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05
 3.87420489e+08]
[0. 0. 0. 0. 0.]

# 统计函数
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  # 二维数组
print(np.amin(a))  # 最小值
print(np.amax(a))  # 最大值
print(np.amin(a, 0))  # 沿着axis=0轴(相当于列)的最小值
print(np.amin(a, 1))  # 沿着axis=1轴(相当于行)的最小值
print(np.amax(a, 0))
print(np.amax(a, 1))

结果:
1
9
[1 2 3]
[1 4 7]
[7 8 9]
[3 6 9]
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  # 二维数组
# 最大值与最小值之差 ptp()
print(np.ptp(a))
print(np.ptp(a, 0))
print(np.ptp(a, 1))

结果:
8
[6 6 6]
[2 2 2]
# 统计数组的百分位数 percentile()
print(np.percentile(a, 50))
print(np.percentile(a, 50, axis=0))
print(np.percentile(a, 50, axis=1))

结果:
5.0
[4. 5. 6.]
[2. 5. 8.]
# 统计数组中的中位数median() 平均数mean()
# 求中位数
print(np.median(a))
print(np.median(a, axis=0))
print(np.median(a, axis=1))

结果:
5.0
[4. 5. 6.]
[2. 5. 8.]
# 求平均数
print(np.mean(a))
print(np.mean(a, axis=0))
print(np.mean(a, axis=1))

结果:
5.0
[4. 5. 6.]
[2. 5. 8.]
# 统计数组中的加权平均值average()
a = np.array([1, 2, 3, 4])
wts = np.array([1, 2, 3, 4])  # 权重数组
print(np.average(a))
print(np.average(a, weights=wts))

结果:
2.5
3.0

还有好多好多····需要用的时候直接Google一下就好咯!

4.NumPy排序

数据结构与算法里我们学过各种各样的排序算法,并且要求我们直接能写出算法伪代码orz,但是美丽的Python只需要我们指定算法名称就可以啦~所以我们当然是选取时间/空间复杂度表现最优秀的几个算法

1.快速排序quicksort

快排被认为是目前基于比较的内部排序方法中最好的方法(大家还记得partition吗qaq就是这个)

在这里插入图片描述

2.归并排序mergesort

在这里插入图片描述

3.堆排序heapsort

在这里插入图片描述

在 NumPy 中这些排序算法一条语句就可以搞定。

  1. 使用 sort 函数,sort(a, axis=-1, kind=‘quicksort’, order=None),默认情况下使用的是快速排序;
  2. 在 kind 里,可以指定 quicksort、mergesort、heapsort 分别表示快速排序、归并排序、堆排序。
  3. axis 默认是 -1,即沿着数组的最后一个轴进行排序,也可以取不同的 axis 轴,或者 axis=None 代表按照一维数组进行排序。 order 字段,对于结构化的数组可以指定按照某个字段进行排序。
import numpy as np
a = np.array([[1, 2, 3], [11, 5, 6], [7, 0, 9]])  # 二维数组
print(np.sort(a, axis=-1, kind="quicksort", order=None))

结果:
[[ 1  2  3]
 [ 5  6 11]
 [ 0  7  9]]
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值