Numpy(3/3):进阶知识

目录

一、NumPy 排序、条件刷选函数

二、NumPy 字节交换

三、NumPy 副本和视图

四、NumPy 矩阵库(Matrix)

五、NumPy 线性代数

六、NumPy IO

七、NumPy Matplotlib


一、NumPy 排序、条件刷选函数

Numpy(3/3):进阶知识_第1张图片

Numpy(3/3):进阶知识_第2张图片 

numpy.argsort() 函数返回的是数组值从小到大的索引值。 

numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。

Numpy(3/3):进阶知识_第3张图片

Numpy(3/3):进阶知识_第4张图片numpy.argmax() numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。

numpy.nonzero() 函数返回输入数组中非零元素的索引。

numpy.where() 函数返回输入数组中满足给定条件的元素的索引。

numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。

import numpy as np 
 
x = np.arange(9.).reshape(3,  3)  
print ('我们的数组是:')
print (x)
# 定义条件, 选择偶数元素
condition = np.mod(x,2)  ==  0  
print ('按元素的条件值:')
print (condition)
print ('使用条件提取元素:')
print (np.extract(condition, x))

二、NumPy 字节交换

三、NumPy 副本和视图

副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置。

视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。

视图一般发生在:

  • 1、numpy 的切片操作返回原数据的视图。
  • 2、调用 ndarray 的 view() 函数产生一个视图。

副本一般发生在:

  • Python 序列的切片操作,调用deepCopy()函数。
  • 调用 ndarray 的 copy() 函数产生一个副本。

四、NumPy 矩阵库(Matrix)

NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。

转置矩阵:NumPy 中除了可以使用 numpy.transpose 函数来对换数组的维度,还可以使用 T 属性。

import numpy as np
 
a = np.arange(12).reshape(3,4)
 
print ('原数组:')
print (a)
print ('\n')
 
print ('转置数组:')
print (a.T)

matlib.empty() 函数返回一个新的矩阵,语法格式为:

Numpy(3/3):进阶知识_第5张图片

import numpy.matlib 
import numpy as np
 
print (np.matlib.empty((2,2)))
# 填充为随机数据

numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。

numpy.matlib.ones()函数创建一个以 1 填充的矩阵。

numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零,不一定是方阵。

numpy.matlib.identity() 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。

numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。

矩阵总是二维的,而 ndarray 是一个 n 维数组。 两个对象都是可互换的。

五、NumPy 线性代数

Numpy(3/3):进阶知识_第6张图片

numpy.matmul和dot不同点:

numpy.dot() 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩阵乘积;对于多维数组,它的通用计算公式如下,即结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和: dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])。

numpy.matmul 函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。另一方面,如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,并在乘法之后被去除。但对于二维数组,它就是矩阵乘法。

六、NumPy IO

Numpy(3/3):进阶知识_第7张图片

Numpy(3/3):进阶知识_第8张图片 

Numpy(3/3):进阶知识_第9张图片 

Numpy(3/3):进阶知识_第10张图片 

七、NumPy Matplotlib

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

import numpy as np 
from matplotlib import pyplot as plt 
 
x = np.arange(1,11) 
y =  2  * x +  5 
plt.title("Matplotlib demo") 
plt.xlabel("x axis caption") 
plt.ylabel("y axis caption") 
plt.plot(x,y) 
plt.show()

 关于绘图库的更多知识建议单独学习。

你可能感兴趣的:(机器视觉基础工具,python,opencv,numpy,计算机视觉,开发语言)