numpy库 系列知识点总结

在 NumPy 里有两个重要的对象:

  • ndarray(N-dimensional array object)解决了多维数组问题
  • ufunc(universal function object)是解决对数组进行处理的函数。

ndarray 对象
ndarray 实际上是多维数组的含义。在 NumPy 数组中,维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。在 NumPy 中,每一个线性的数组称为一个轴(axes),其实秩就是描述轴的数量。

  • 创建数组
import numpy as np #导入库
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b[1,1]=10 #修改数组
print (a.shape) #查看数组大小
print (b.shape)
print (a.dtype) #查看数组属性
print (b)

在这里插入图片描述

  • 结构数组
import numpy as np
persontype = np.dtype({
    'names':['name', 'age', 'chinese', 'math', 'english'],
    'formats':['S32','i', 'i', 'i', 'f']})
peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
       ("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
    dtype=persontype)
ages = peoples[:]['age']
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']
print (np.mean(ages))
print (np.mean(chineses))
print (np.mean(maths))
print (np.mean(englishs))

在这里插入图片描述
首先在 NumPy 中是用 dtype 定义的结构类型,然后在定义数组的时候,用 array 中指定了结构数组的类型 dtype=persontype,这样你就可以自由地使用自定义的 persontype 了。比如想知道每个人的语文成绩,就可以用 chineses = peoples[:][‘chinese’],当然 NumPy 中还有一些自带的数学运算,比如计算平均值使用 np.mean。

ufunc 运算
ufunc 是 universal function 的缩写,它能对数组中每个元素进行函数操作。NumPy 中很多 ufunc 函数计算速度非常快,因为都是采用 C 语言实现的。

  • 连续数组的创建
    NumPy 可以很方便地创建连续数组,比如我使用 arange 或 linspace 函数进行创建:
x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)

np.arange 和 np.linspace 起到的作用是一样的,都是创建等差数组。这两个数组的结果 x1,x2 都是[1 3 5 7 9]。结果相同,但是你能看出来创建的方式是不同的。

arange() 类似内置函数 range(),通过指定初始值、终值、步长来创建等差数列的一维数组,默认是不包括终值的

linspace 是 linear space 的缩写,代表线性等分向量的含义。linspace() 通过指定初始值、终值、元素个数来创建等差数列的一维数组,默认是包括终值的

  • 算术运算
    通过 NumPy 可以自由地创建等差数组,同时也可以进行加、减、乘、除、求 n 次方和取余数。
x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)
print(x1)
print(x2)
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))  # 求n次方
print(np.remainder(x1, x2))  # 取余数
print(np.mod(x1, x2))  # 取余数

在这里插入图片描述

  • 统计函数
    如果你想要对一堆数据有更清晰的认识,就需要对这些数据进行描述性的统计分析,比如了解这些数据中的最大值、最小值、平均值,是否符合正态分布,方差、标准差多少等等。它们可以让你更清楚地对这组数据有认知。
    计数组 / 矩阵中的最大值函数 max(),最小值函数 min()
import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.min(a))  # 全部元素最小值 1
print(np.min(a, 0))  # axis=0轴的最小值 [1, 2, 3,]
print(np.min(a, 1))  # axis=1轴的最小值 将数组视为 [1,4,7], [2,5,8], [3,6,9]三个元素 [1, 4, 7]
print(np.max(a))  # 全部元素最大值 1
print(np.max(a, 0))  # axis=0轴的最大值 [7, 8, 9,]
print(np.max(a, 1))  # axis=1轴的最大值 将数组视为 [1,4,7], [2,5,8], [3,6,9]三个元素 [1, 4, 7]

在这里插入图片描述
统计最大值与最小值之差 ptp()

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print (np.ptp(a))
print (np.ptp(a,0))# axis=0轴的最大值 [7, 8, 9,] 最小值[1,2,3]
print (np.ptp(a,1))#axis=1轴的最大值[3,6,9],最小值[1,4,7]

在这里插入图片描述
统计数组的百分位数 percentile()

import numpy as np

# percentile()代表着第 p 个百分位数,这里p的取值范围是0-100,如果p=0,那么就是求最小值,如果p=50就是求平均值,如果p=100就是求最大值。
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.percentile(a, 50))  # 5.0
print(np.percentile(a, 50, axis=0))  # [4, 5, 6]
print(np.percentile(a, 50, axis=1))  # [2, 5, 8]

在这里插入图片描述
统计数组中的中位数 median()、平均数 mean()

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 求中位数
print(np.median(a))  # 5.0
print(np.median(a, axis=0))  # [4. 5. 6.]
print(np.median(a, axis=1))  # [2. 5. 8.]
# 求平均数
print(np.mean(a))  # 5.0
print(np.mean(a, axis=0))  # [4. 5. 6.]
print(np.mean(a, axis=1))  # [2. 5. 8.]

在这里插入图片描述
统计数组中的加权平均值 average()

import numpy as np
# 求加权平均数
a1 = np.array([1, 2, 3, 4])
wts = np.array([1, 2, 3, 4])
print(np.average(a1))  # 2.5
print(np.average(a1, weights=wts))  # weights 为设置加权的权重 3.0

average() 函数可以求加权平均,加权平均的意思就是每个元素可以设置个权重,默认情况下每个元素的权重是相同的,所以 np.average(a)=(1+2+3+4)/4=2.5,你也可以指定权重数组 wts=[1,2,3,4],这样加权平均 np.average(a,weights=wts)=(11+22+33+44)/(1+2+3+4)=3.0。

统计数组中的标准差 std()、方差 var()

import numpy as np
# 求加权平均数
a = np.array([1, 2, 3, 4])
# 标准差及方差
print(np.std(a))  # 1.118033988749895
print(np.var(a))  # 1.25

方差的计算是指每个数值与平均值之差的平方求和的平均值,即 mean((x - x.mean())** 2)。标准差是方差的算术平方根。在数学意义上,代表的是一组数据离平均值的分散程度。所以 np.var(a)=1.25, np.std(a)=1.118033988749895。

NumPy 排序
排序算法在 NumPy 中实现起来其实非常简单,一条语句就可以搞定。这里可以使用 sort 函数,sort(a, axis=-1, kind=‘quicksort’, order=None),默认情况下使用的是快速排序;

在 kind 里,可以指定 quicksort、mergesort、heapsort 分别表示快速排序、合并排序、堆排序。同样 axis 默认是 -1,即沿着数组的最后一个轴进行排序,也可以取不同的 axis 轴,或者 axis=None 代表采用扁平化的方式作为一个向量进行排序。另外 order 字段,对于结构化的数组可以指定按照某个字段进行排序。

import numpy as np

a = np.array([[4, 3, 2], [2, 4, 1]])
print(np.sort(a))  # 默认从小到大排序
print(np.sort(a, axis=None))  # axis为none会将数组降为一维 [1 2 2 3 4 4]
print(np.sort(a, axis=0))  # [[2 3 1],[4 4 2]] 跨行 纵向

print(np.sort(a, axis=1))  # [[2 3 4],[1 2 4]] 跨列 横向

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值