首页 > python学习 > python中的numpy模块
2021
09-28

python中的numpy模块

NumPy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

使用pip install numpy即可完成安装

NumPy数据类型

numpy支持的数据类型比Python内置的类型要多很多,基本上可以和C语言的数据类型对应上

bool_       布尔型数据类型(True 或者 False)
int_        默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc        与 C 的 int 类型一样,一般是 int32 或 int 64
intp        用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8        字节(-128 to 127)
int16       整数(-32768 to 32767)
int32       整数(-2147483648 to 2147483647)
int64       整数(-9223372036854775808 to 9223372036854775807)
uint8       无符号整数(0 to 255)
uint16      无符号整数(0 to 65535)
uint32      无符号整数(0 to 4294967295)
uint64      无符号整数(0 to 18446744073709551615)
float_      float64 类型的简写
float16     半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32     单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64     双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_    complex128 类型的简写,即 128 位复数
complex64   复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128  复数,表示双 64 位浮点数(实数部分和虚数部分)

Ndarray数组

NumPy最重要的一个特点是其N维数组对象ndarray

ndarray数组是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域

创建Ndarray数组

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
    object  数组或嵌套的数列
    dtype   数组元素的数据类型,可选
    copy    对象是否需要复制,可选
    order   创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
    subok   默认返回一个与基类类型一致的数组
    ndmin   指定生成数组的最小维度

numpy.asarray(a, dtype = None, order = None)
    类似 numpy.array,但numpy.asarray参数只有三个

numpy.empty(shape, dtype = float, order = 'C')
    创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组
    数组元素全部为随机值
    shape   数组形状
    dtype   数据类型,可选
    order   在计算机内存中的存储元素的顺序,有"C"和"F"两个选项,分别代表行优先和列优先

numpy.zeros(shape, dtype = float, order = 'C')
    创建指定大小的数组,数组元素以 0 来填充

numpy.ones(shape, dtype = None, order = 'C')
    创建指定形状的数组,数组元素以 1 来填充

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
    接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象,用于实现动态数组
    buffer  可以是任意对象,会以流的形式读入
    count   读取的数据数量,默认为-1,读取所有数据
    offset  读取的起始位置,默认为0

numpy.fromiter(iterable, dtype, count=-1)
    从可迭代对象中建立ndarray对象,返回一维数组
    count   读取的数据数量,默认为-1,读取所有数据

numpy.arange(start=0, stop, step=1, dtype)
     start与stop(不包含)指定的范围以及step设定的步长,生成一个ndarray

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    用于创建一个一维数组,数组是一个等差数列构成的
    num要生成的等步长的样本数量,默认为50
    endpoint为true时,数列中包含stop值,默认是True
    retstep如果为True时,生成的数组中会显示间距,反之不显示

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
    用于创建一个于等比数列
    base对数log的底数

数组的切片

内置slice(start=0, stop , step=1)函数,从原数组中切割出一个新数组

中括号[start:stop:step]

切片还可以包括三个点(...),来使选择元组的长度与数组的维度相同

    a[...,1]   # 第2列元素
    a[1,...]   # 第2行元素
    a[...,1:]  # 第2列及剩下的所有元素

数组的遍历

flat属性返回一个数组元素迭代器
for x in arr.flat:print(x)
#按照数组在内存中的布局逐行遍历

nditer(ndarray,order=None,op_flags='readonly')函数用于遍历数组中的元素
    order可选值'C'(逐行遍历)或'F'(逐列遍历),默认按照数组在内存中的布局逐行遍历
    op_flags表示遍历对象的读写权限,可选值'readonly','writeonly','readwrite'

for x in numpy.nditer(ndarray):print(x)
#逐行打印所有元素

for x in numpy.nditer(ndarray,order='F'):print(x)
for x in numpy.nditer(ndarray.T,order='C'):print(x)
#以上两种方式都可以实现逐列打印所有元素
#由于ndarray.T仅返回一个转置后的拷贝,对应的数组在内存中的布局并未改变,所以此时必须指定order='C'

for x in np.nditer(a, op_flags=['readwrite']):x[...]=2*x
#将数组中多有元素的值修改为之前的2倍

Ndarray数组的属性和方法

numpy.transpose(arr) :转置数组,功能和ndarray.T属性相同
ndarray.T       转置数组,即把行和列调换,返回置换后的数组,不影响原数组
ndarray.ndim    秩,即轴的数量或维度的数量
ndarray.shape   数组的维度,表示各维度大小的元组
ndarray.size    数组元素的总个数
ndarray.dtype   ndarray中的元素类型
ndarray.itemsize   每个元素的大小,以字节为单位
ndarray.flags   ndarray对象的内存信息
    C_CONTIGUOUS (C)  数据是在一个单一的C风格的连续段中
    F_CONTIGUOUS (F)  数据是在一个单一的Fortran风格的连续段中
    OWNDATA (O)       数组拥有它所使用的内存或从另一个对象中借用它
    WRITEABLE (W)     数据区域可以被写入,将该值设置为 False,则数据为只读
    ALIGNED (A)       数据和所有元素都适当地对齐到硬件上
    UPDATEIFCOPY (U)  这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新
ndarray.real    ndarray元素的实部
ndarray.imag    ndarray 元素的虚部
ndarray.data    包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

ndarray.reshape(newshape, order='C):不改变数据的条件下将ndarray数组中的所有元素重新组合成指定的维度
    返回的是非拷贝副本
    如果更改了其中一个值,那么原ndarray数组中对应的元素值也会改变
    order的值'C'按行,'F'按列,'A'原顺序,'K'元素在内存中的出现顺序
ndarray.flatten(order='C') :返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
ndarray.ravel(order='C') :展开的数组元素,转变为一维数组
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。