相关文章推荐
大方的蚂蚁  ·  Mac下搭建jekyll环境 - ...·  1 年前    · 
瘦瘦的海豚  ·  请大侠帮助: ...·  1 年前    · 

Numpy是一个开源的Python科学计算库,它是python科学计算库的基础库,许多其他著名的科学计算库如Pandas,Scikit-learn等都要用到Numpy库的一些功能。

ndarray对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或 dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
    ndarray 的内部结构:
    【NumPy】NumPy基本功能与常用方法总结_数组
    跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。
ndarray数组的创建

numpy.array

创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

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

ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

numpy.empty

numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
numpy.empty(shape, dtype = float, order = 'C')

shape dtype 数据类型,可选 order 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

注意 − 数组元素为 随机值 ,因为它们未初始化。

numpy.zeros

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

shape dtype 数据类型,可选 order 'C' 用于 C 的行数组,或者 'F' 用于 FORTRAN 的列数组

numpy.ones

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

shape dtype 数据类型,可选 order 'C' 用于 C 的行数组,或者 'F' 用于 FORTRAN 的列数组

numpy.asarray

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

任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组 dtype 数据类型,可选 order 可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

numpy.frombuffer

numpy.frombuffer 用于实现动态数组。
numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)

buffer 可以是任意对象,会以流的形式读入。 dtype 返回数组的数据类型,可选 count 读取的数据数量,默认为-1,读取所有数据。 offset 读取的起始位置,默认为0。

numpy.fromiter

numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。
numpy.fromiter(iterable, dtype, count=-1)

iterable 可迭代对象 dtype 返回数组的数据类型 count 读取的数据数量,默认为-1,读取所有数据

numpy.arange

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。

start 起始值,默认为0 终止值(不包含) 步长,默认为1 dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。

numpy.linspace

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

start 序列的起始值 序列的终止值,如果endpoint为true,该值包含于数列中 要生成的等步长的样本数量,默认为50 endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。 retstep 如果为 True 时,生成的数组中会显示间距,反之不显示。 dtype ndarray 的数据类型

numpy.logspace

numpy.logspace 函数用于创建一个于等比数列。格式如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
base 参数意思是取对数的时候 log 的下标。

start 序列的起始值为:base ** start 序列的终止值为:base ** stop。如果endpoint为true,该值包含于数列中 要生成的等步长的样本数量,默认为50 endpoint 该值为 true 时,数列中中包含stop值,反之不包含,默认是True。 对数 log 的底数。 dtype ndarray 的数据类型

numpy.reshape

numpy.reshape 函数可以在不改变数据的条件下修改形状,也可以用于创建新的数组
numpy.reshape(arr, newshape, order='C')

ndarray数组的属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
NumPy 的数组中比较重要 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 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性 ndarray.nbytes 整个数组所需的字节数量,其值等于数组的size属性值乘以itemsize属性值 ndarray.flat 返回一个numpy.flatiter对象,即可迭代的对象。可用来索引或赋值 ndarray.T ndarray数组的切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组,也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作。
NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。

整数数组索引

要获取二维数组中(x1, y1)和(x2, y2)的值可以写成:
y = x[ [x1, x2], [y1, y2] ]

通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应下标的行,如果目标是二维数组,那么就是对应位置的元素。
花式索引跟切片不一样,它总是将数据复制到新数组中。
可以传入顺序、逆序或多个(要使用np.ix_)索引数组。

ndarray数组的形状转换

reshape()和resize()

函数resize()的作用跟reshape()类似,但是会改变所作用的数组,相当于有inplace=True的效果。

ravel()和flatten()

两者的区别在于返回拷贝(copy)还是返回视图(view),flatten()返回一份拷贝,需要分配新的内存空间,对拷贝所做的修改不会影响原始矩阵,而ravel()返回的是视图(view),会影响原始矩阵。

transpose()

数组转置,效果同上述ndarray.T。

ndarray数组的堆叠

column_stack()函数以列方式对数组进行叠加,功能类似 hstack()

row_stack()函数以行方式对数组进行叠加,功能类似 vstack()

concatenate()方法,通过设置axis的值来设置叠加方向
axis=1时,沿水平方向叠加
axis=0时,沿垂直方向叠加

dstack()

ndarray数组的数组的拆分

hsplit()

vsplit()

dsplit()方法,通过设置axis的值来设置拆分方向
axis=1时,沿水平方向拆分
axis=0时,沿垂直方向拆分

split()

ndarray数组的数组的类型转换

tolist()

数组转换成list

astype()

转换成指定类型

numpy常用统计函数

注意函数在使用时需要指定axis轴的方向,若不指定,默认统计整个数组。

  • np.sum(),返回求和
  • np.mean(),返回均值
  • np.max(),返回最大值
  • np.min(),返回最小值
  • np.ptp(),数组沿指定轴返回最大值减去最小值,即(max-min)
  • np.std(),返回标准偏差(standard deviation)
  • np.var(),返回方差(variance)
  • np.cumsum(),返回累加值
  • np.cumprod(),返回累乘积值
  • 本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。

    博主是利用学习、参考、实践、复制和粘贴等多种方式打造成自己的文章,如有帮助记得点赞!