NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含一个强大的N维数组对象 ndarray、广播功能函数、整合 C/C++/Fortran代码的工具和线性代数、傅里叶变换、随机数生成等功能。
将NumPy包引入,没有的话需要先安装。
import numpy as np
一、ndarray对象
NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。ndarray对象是用于存放同类型元素的多维数组。ndarray中的每个元素在内存中都有相同存储大小的区域。
ndarray内部组成部分:
-
一个指向数据(内存或内存映射文件中的一块数据)的指针。
-
数据类型或 dtype,描述在数组中固定大小值的格子。
-
一个表示数组形状(shape)的元组,表示各维度大小的元组。
-
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要“跨过”的字节数。
创建ndarray只需要用NumPy的array函数即可:
np.array(object, dtype = None, copy = Ture, order = None, subok = False, ndmin = 0)
- object表示数组或嵌套的数列;
- dtype表示数组元素的数据类型;
- copy表示对象是否需要复制;
- order表示创建数组的样式,C为行方向,F为列方向,A为任意方向(默认);
- subok表示默认返回一个与基类类型一致的数组;
- ndmin指定生成数组的最小维度。
例如:
a = np.array([1, 2, 3, 4 ,5], ndmin = 2)
print(a)
输出;
[[1, 2, 3, 4, 5]]
# 如果ndmin = 1,则输出[1 2 3 4 5]
二、数组属性
NumPy数组的维数称为秩(rank),即轴的数量或数组的维度:一维数组的秩为1,二维数组的秩为2,以此类推。
ndarray对象属性:
- ndarray.ndim:秩,即轴的数量或维度的数量;
- ndarray.shape:数组的维度,对于矩阵,就是指n行m列;
- ndarray.size:数组元素的总个数,相当于.shape中n×m的值;
- ndarray.dtype:ndarray对象的元素类型;
- ndarray.itemsize:ndarray对象中每个元素的大小,以字节为单位;
- ndarray.flags:ndarray对象的内存信息;
- ndarray.real:ndarray元素的实部;
- ndarray.imag:ndarray元素的虚部;
- ndarray.data:包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,因此通常不需要使用这个属性。
三、NumPy函数学习汇总
import numpy as np
1.np.fromfile()
fromfile函数是支持中文路径的。
使用方法:img = cv.imdecode(np.fromfile("山水.jpg, dtype = np.uint8"), -1)
2.np.shape()
使用方法:np.shape(img) 通过shape方法获取图像的高度、宽度和通道数。
import cv2 as cv
import numpy as np
img = cv.imread('test.jpg')
height = np.shape(img)[0] # 获取高
weight = np.shape(img)[1] # 获取宽
channles = np.shape(img)[2] # 获取通道数
# a[:n]代表列表中的第一项到第n项,即shape[0],shape[1],shape[2]
height, weight, channles = np.shape(img)[:3]
3.np.hstack()和np.array()
hstack函数就是把两个行相同的数组或者矩阵的列从左到右排列起来,也就是把列水平排列起来。声明如下:
np.hstack(tup)
解释:其中,tup是ndarrays数组序列。这里说的数组就是NumPy库的array,比如定义了一个3行5列的二位矩阵数组:
a = np.array([0, 1, 2 ,3 ,4],
[5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]) # 有时候方括号业可以用圆括号表示
print(a.shape) # 输出(3,5)
行数是矩阵的高度,列数是矩阵的宽度。
使用hstack函数来合并行数相同的矩阵数组,比如合并两个都是1行的一维数组:
a = np.array((1, 2 ,3)) b = np.array((4, 5, 6, 7)) e = np.hstack((a, b)) print(e) 输出: array([1, 2, 3, 4 ,5 ,6 ,7])
4.np.zeros()
numpy.zeros(shape, dtype = float, order = 'C')
np.zeros()返回一个给定形状和类型的用0填充的数组。
- shape表示数组形状;
- dtype表示数据类型,可选;
- order表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’。
例如:
np.zeros((200, 200)) 表示建立一个200行200列的矩阵
5.np.empty()
np.empty()创建一个指定形状、数据类型且未初始化的数组。
numpy.empty(shape, dtype = float, order = 'C')
- shape表示数组形状;
- dtype表示数据类型,可选;
- order表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’,分别代表行优先和列优先,在计算机内存中存储元素的顺序。
例如:
x = np.empty([3, 2], dtype = int)
print(x)
输出结果为:
[[508 0]
[0 0]
[0 0]]
# 数组元素为随机值,因为他们未初始化
6.np.ones()
np.ones:创建指定形状的数组,数组元素用1来填充
np.ones(shape, dtype = None, order = 'C')
- shape表示数组形状;
- dtype表示数据类型,可选;
- order表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’,分别代表行优先和列优先,在计算机内存中存储元素的顺序。
7.np.arange()
np.arange([start, ]stop, [step, ]dtype=None)
- start:起点值;可忽略不写,默认从0开始
- stop:终点值;生成的元素不包括结束值
- step:步长;可忽略不写,默认步长为1
- dtype:默认为None,设置显示元素的数据类型
不同参数个数情况介绍:
- 一个参数时,参数值为终点值,起点取默认值0,步长取默认值1。
- 两个参数时,第一个参数为起点值,第二个参数为终点,步长取默认值1。
- 三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长,其中步长支持小数。
例如:
np.arange(7) # [0,1,2,3,4,5,6]
np.arange(3,7) # [3,4,5,6]
np.arange(3,7,2) # [3,5]
x = np.arange(5, dtype = float)
print(x)
输出结果为:[0. 1. 2. 3. 4.]
https://blog.csdn.net/qq_45154565/article/details/115690186参考:https://blog.csdn.net/qq_45154565/article/details/115690186
8.np.asarray()
类似于numpy.array,但是numpy.asarray参数只有三个,比numpy.array少两个。
numpy.asarray(a, dtype = None, order = None)
- a:是任意形式的输入参数,可以是列表、列表的元组、元组、元组的元组、元组的列表和多维数组;
- dtype:表示数据类型,可选;
- order:表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’,分别代表行优先和列优先,在计算机内存中存储元素的顺序。
实例:
x = [1,2,3]
a = np.asarray(x)
print(a)
输出结果为:[1 2 3]
x = [1,2,3]
a = np.asarray(x, dtype = float)
print(a)
输出结果为:[1. 2. 3.]
9.np.frombuffer()
np.frombuffer用于实现动态数组。numpy.frombuffer接受buffer 输入参数,以流的形式读入转化成ndarray对象。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
- buffer:可以是任意对象,会以流的形式读入;
- dtype:表示数据类型,可选;
- count:表示读取的数据数量,默认为-1,读取所有的数据;
- offer:表示读取的起始位置,默认为0。
10.np.fromiter()
np.fromiter从可迭代对象中建立 ndarray对象,返回一维数组。
numpy.fromiter(iterable, dtype, count=-1)
- iterable:表示可迭代对象;
- dtype:表示返回数组的数据类型,可选;
- count:表示读取的数据数量,默认为-1,读取所有的数据;
例如:
# 使用range函数创建列表对象
list = range(5)
it = iter(list)
# 使用迭代器创建ndarray
x = np.fromiter(it, dtype = float)
print(a)
输出结果为:[0. 1. 2. 3. 4.]
11.np.linspace()
用于创建一个一位数组。数组是有一个等差数列构成的,原型如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- start:表示序列的起始值;
- stop:表示序列的终止值;
- endpoint:如果endpoint为ture,那么该值包含于数列中;
- num:表示要生成的等步长的样本数量,默认为50;
- retstep:retstep为True时,生成的数组中会显示间距,反之不显示;
- dtype:表示ndarray的数据类型。
12.np.logspace()
创建一个于等比数列。原型如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
- start:代表间隔的起始值;
- stop:代表以区间为基础的 间隔的停止值;
- num:表示start和stop范围之间的值数;
- endpoint:时一个布尔型值。它将stop表示的值作为间隔的最后一个值;
- base:代表日志空间的底数;
- dtype:代表数组项的数据类型。
学习书:OpenCV计算机视觉开发实战(基于python)
ps:正在努力学习中,为待完成...
标签:模块,dtype,数据类型,shape,数组,np,视觉,NumPy,ndarray From: https://blog.csdn.net/KingGodZ/article/details/141157654