Numpy计算

广播机制是Numpy科学计算库里非常重要的概念。运用广播机制可以高效解决不同维度数组数据之间的运算。

一、理解一些基本概念

广播机制就是两个不同形状的数组在运算时,其中一个数组需要扩展为和另一数组后缘维度相同,如果不具备扩展为后缘维度相同的条件,则抛出错误。

后缘维度是指从数组的末尾开始算起的维度
e.g:

image.png

二维数组,形状为2行6列 ,shape=(2,6),后缘维度即为6

数组运算,需要符合广播原则的才能正常运算

原则:

如果两个数组的维度不同,那么较小维度的数组会在前面补1,直到两个数组的维度相同。

如果两个数组在某个维度上的大小不同,那么其中一个数组在该维度上的大小必须为1。从后缘维度开始逐一往前比较

如果两个数组在所有维度上的大小要么相等,要么其中一个为1,则它们可以进行广播

e.g:
两个数组形状分别为(2,6),(5,6),两个数组后缘维度都为6,但2和5不同且其中任一个都不是1,故无法广播

两个数组形状分别为(2,1),(5,3),两个数组后缘维度不同,但有一个为1,那么继续往前比较,2和5不同且其中任一个都不是1,故无法广播

两个数组形状分别为(2,1),(1,3),两个数组后缘维度不同,但有一个为1,那么继续往前比较,2和1不同且其中有一个是1,故可以广播

二、索引和切片

和python中列表中的索引和切片完全一致的理解
高维数组的索引使用: a[i,x,y]
i,x,y分别是每个轴上对应的下标值,其中切片时,可以使用p:q来取某个轴上的部分

e.g:
二维数组


image.png

取值3时,则a[0,2]
切片a[0:2,1:3] 0轴上切0-1行,1轴上切1-2列

三、广播常用方法函数

1、筛选 numpy.where(codition,x,y)

condition是布尔类型的表达式或者数组
x,condition为真时返回的数组,可选
y,condition为假时返回的数组,可选
根据条件,where()最后返回索引的数组或者x或者y组成的数组
e.g:

a = np.arange(12)
n = np.where(a>3)

n返回的是数组a元素大于3的索引值组成的数组

也可以用作数据替换清洗

a = np.arange(12)
n = np.where(a>3,10,0)

2、检查 numpy.any() /numpy.all()

any() 检查数组中是否至少有一个TRUE
all() 检查数组中是否全部为TRUE

a = np.array([0,1,0])

print(a.any())
print(np.any(a))
print(np.all(a))
print(np.any(a == 1))

3、排序sorted()/sort()/argsort()

sorted() 是公共库里的函数,直接传数组对象进行排序,返回新数组
xx.sort() 是数组对象的方法,直接对原数组排序

a = np.array([0,1,0])
b = sorted(a)  #函数返回新数组
a.sort()  #直接在原数组进行排序
numpy.argsort(a, axis=-1, kind='quicksort', order=None)

argsort()函数返回的是数组元素排序后的索引,而不是排序后的数组本身

numpy.argsort(a, axis=-1, kind='quicksort', order=None)
# a:要排序的数组
# axis :指定沿着哪个轴进行排序。默认是-1,表示对最后一个轴进行排序。
# kind :排序算法的选择,可以是'quicksor'、'mergesort'或'heapsort'。默认是'quicksort.kind 
# order:如果a是结构体数组,该参数指定按哪个字段进行排序。

e.g:

a = np.array([0,1,0])
b = np.argsort(a)
print(b) #b为排序后索引组成的数组

4、去重unique

a = np.array([0,1,0])
print(np.unique(a))

5、包含 isin

numpy.isin(element, test elements, assume unique=False, invert=False)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容