1、什么是Numpy

简单来说:

  • Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
  • Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
  • Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。这里的相同类型的item是指每一列的数据类型要一致,不同列不一定。有点像关系表那种。

比如说:

python的numpy二维数组怎么得到长宽 numpy 二维数组_数据

2、N维数组-ndarray

数组属性反映了数组本身固有的信息,任何一个数组实例都可以调用一下方法:

属性名字

属性解释

ndarray.shape

数据几行几列

ndarray.size

数组中的元素数量

ndarray.dtype

数组元素的类型

python的numpy二维数组怎么得到长宽 numpy 二维数组_数据_02

ps:关于数组的shape

  • 一维数组
  • 比如说,a1 = np.array([1,2,3,4])
  • 二维数组
  • a2 = np.array([[1,2,3,4],
    [5,6,7,8]])
  • 注意a有两层 [[...],[...],[...]]

python的numpy二维数组怎么得到长宽 numpy 二维数组_数据_03

  • 三维数组
  • a3 = np.array([[[1,2,3],[4,5,6]],[5,6,7,8]])
  • 注意a3有三层 [[[],...],[...],[...]]

python的numpy二维数组怎么得到长宽 numpy 二维数组_数组_04

3、Numpy基本操作

3.1 生成数组的方法

(1)生成全是0,或全是1

  • np.ones(shape, dtype)
  • 生成全是1的数组,shape为表示行列的元组(注意是元组,否则报错~)

python的numpy二维数组怎么得到长宽 numpy 二维数组_数据_05

  • np.ones_like(a, dtype)
  • 生成全是1的数组,shape像数组a
  • np.zeros(shape, dtype)
  • np.zeros_like(a, dtype)

(2)从现有的数组中生成

  • np.array(object, dtype)
  • np.asarray(a, dtype
a = np.array([[1,2,3],[4,5,6]])
a1 = np.array(a)
# 从现有的数组当中创建,a1和a是独立的两个数组
a2 = np.asarray(a)
# 相当于索引的形式,并没有真正的创建一个新的数组,对a2进行修改,会直接影响到a。


(3)生成固定范围的数组

  • np.linspace (start, stop, num, endpoint)
  • np.arange(start,stop, step, dtype)
  • np.logspace(start,stop, num)

3.2 Numpy的随机数组

关于 numpy.random模块

3.2.1正态分布的随机数组

  • np.random.randn(d0, d1, …, dn)
  • d0,d1,...,dn 代表维度
  • 比如说 c = np.random.randn(1,2,3),代表生成一个三维数组,最外岑一个list,次外层两个list,最内层每个list有三个元素

python的numpy二维数组怎么得到长宽 numpy 二维数组_均匀分布_06


  • np.random.normal(loc=0.0, scale=1.0, size=None)
loc:float

 此概率分布的均值(对应着整个分布的中心centre)

scale:float

 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)

size:int or tuple of ints

 输出的shape,不写则输出一个值,写(3,4)则输出三行四列的数组

python的numpy二维数组怎么得到长宽 numpy 二维数组_均匀分布_07


  • np.random.standard_normal(size=None)

3.2.2均匀分布的随机数组

  • np.random.rand(d0, d1, ..., dn)
返回[0.0,1.0)内的一组均匀分布的数。
  • np.random.uniform(low=0.0, high=1.0, size=None)
功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
参数介绍:
low: 采样下界,float类型,默认值为0;
high: 采样上界,float类型,默认值为1;
size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出mnk个样本,缺省时输出1个值。
返回值:ndarray类型,其形状和参数size中描述一致。
  • np.random.randint(low, high=None, size=None, dtype='l')
从一个均匀分布中随机采样,生成一个整数或N维整数数组,
取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。

3.3 数组索引和切片

  • 一维数组
  • 直接定位
  • 二维数组
  • 先行后列,比如a[0:2,0:2],表示数组a的0,1行和0,1列的数据(开区间)

python的numpy二维数组怎么得到长宽 numpy 二维数组_数组_08

python的numpy二维数组怎么得到长宽 numpy 二维数组_数据_09

  • 三维数组
    -从外往内,层层切片

3.4 数组形状修改

  • ndarray.reshape(shape, order)
  • 不改变原来的数组,会重新生成一个shape不同的数组,但是数据与原来数组一样。
  • ndarray.resize(new_shape)
  • 在原来数组上改变形状,不会生成新数组!
  • ndarray.T
  • 数据转置~

3.5 数组类型修改

  • ndarray.astype(type)
    a.astype(np.int32)
  • ndarray.tostring([order])或者ndarray.tobytes([order])
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])
arr.tostring()

4 参考文献

《Pyhton 科学计算》---张若愚