python中的numpy模块
qingheluo2021-09-28清河洛327
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 ...
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.item(x,y[,z]):获取指定的元素值 ndarray.itemset((x,y[,z]),value):修改指定元素的值 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‘) :展开的数组元素,转变为一维数组