计算机视觉2:NumPy模块函数学习

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:正在努力学习中,为待完成...

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听说你还在搞什么原创~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值