Numpy

介绍:

        NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含一个强大的N维数组对象 ndarray、广播功能函数、整合 C/C++/Fortran代码的工具和线性代数、傅里叶变换、随机数生成等功能。 

一,ndarray对象

        1,ndarray的组成内容

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。

  • 数据类型或 dtype,描述在数组中固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要“跨过”的字节数。

二, NumPy的数据类型

三,数组属性

四,新建数组

        1,darray构造器

# order:创建数组的样式,C为行方向,F为列方向,A为任意方向
# numpy.array(object,dtype = None, copy =True, order = None, subok = False, ndmin = 0)

a = np.array([1,2,3])
b = np.array([[1,2],[3,4]]) # 二维数组,外面必须有一层方括号
c = np.array([1,2,3],dtype = complex) #复数

        2,其他方法

【a】等差序列: ``np.linspace, np.arange``

.. ipython:: python

    np.linspace(1,5,11) # 起始、终止(包含)、样本个数
    np.arange(1,5,2) # 起始、终止(不包含)、步长

【b】特殊矩阵: ``zeros, eye, full``

.. ipython:: python

    np.zeros((2,3)) # 传入元组表示各维度大小
    np.eye(3) # 3*3的单位矩阵
    np.eye(3, k=1) # 偏移主对角线1个单位的伪单位矩阵
    np.full((2,3), 10) # 元组传入大小,10表示填充数值
    np.full((2,3), [1,2,3]) # 每行填入相同的列表

【c】随机矩阵: ``np.random``

最常用的随机生成函数为 ``rand, randn, randint, choice`` ,它们分别表示0-1均匀分布的随机数组、标准正态的随机数组、随机整数组和随机列表抽样:

.. ipython:: python

    np.random.rand(3) # 生成服从0-1均匀分布的三个随机数
    np.random.rand(3, 3) # 注意这里传入的不是元组,每个维度大小分开输入

对于服从区间 :math:`a` 到 :math:`b` 上的均匀分布可以如下生成:

.. ipython:: python

    a, b = 5, 15
    (b - a) * np.random.rand(3) + a

一般的,可以选择已有的库函数:

.. ipython:: python

    np.random.uniform(5, 15, 3)

``randn`` 生成了 :math:`N\rm{(\mathbf{0}, \mathbf{I})}` 的标准正态分布:

.. ipython:: python

    np.random.randn(3)
    np.random.randn(2, 2)

对于服从方差为 :math:`\sigma^2` 均值为 :math:`\mu` 的一元正态分布可以如下生成:

.. ipython:: python

    sigma, mu = 2.5, 3
    mu + np.random.randn(3) * sigma

五,从已有的数组创建数据

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

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

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

六,从数值范围创建数组

# 在numpy包中使用arange函数创建数值范围并返回ndarray对象。原型如下:
numpy.arange(start, stop, step, dtype)

# 用于创建一个一位数组。数组是有一个等差数列构成的,原型如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

# 创建一个于等比数列。原型如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

七,切片和索引

        ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。

# 切片索引 =================================================
# ndarray数组可以基于0~n的下标进行索引,切片对象可以通过内置的slice函数
a = np.arange(10)
s = slice(2,7,2)   #从索引 2 开始到索引 7 停止,间隔为2


#  可以也通过冒号分隔切片参数start:stop:step来进行切片操作:
b = a[2:7:2]   #从索引 2 开始到索引 7 停止,间隔为2


# 整数数组索引 =================================================
# 以下实例获取数组中(0,0)、(1,1)和(2,0)位置处的元素。
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  
print (y)


# 布尔索引 ======================================================
# 我们可以通过一个布尔数组来索引目标数组。布尔索引通过布尔运算(如比较运算符)来获取符合指定条件的元素的数组。
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print ('我们的数组是:')
print (x)
print ('\n')
print  ('大于5的元素是:')  # 现在我们会打印出大于5的元素  
print (x[x >  5])

# 花式索引======================================================
# 花式索引指的是利用整数数组进行索引。花式索引根据索引数组的值作为目标数组某个轴的下标来取值。
arr3d = np.arange(12).reshape(2, 2, 3)

# 使用两个整数数组来对axis= 0,1两个轴进行花式索引
print(arr3d[[0, 1], [1, 1]])
print(arr3d[[0, 1], [0, 1, 2]]) # error

# 输出
[[ 3  4  5]
 [ 9 10 11]]

初探Numpy中的花式索引 - 知乎

八,迭代数组

【数据分析之道-NumPy(五)】numpy迭代数组_i阿极(暂时无法回复版)的博客-CSDN博客

九,数组操作函数

# 修改数组形状  =============================
# 可以在不改变数据的条件下修改形状。
numpy.zeros(shape, dtype = float, order = 'C')
# 一个数组元素迭代器
numpy.ndarray.flat
# 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组。原型如下:
ndarray.flatten(order='C')
# 该函数展平的数组元素,顺序通常是"C风格",返回的是数组视图(view,有点类似C/C++引用reference的意思),修改会影响原始数组。
numpy.ravel

# 翻转数组=============================
#用于对换数组的维度。
numpy.transpose(arr, axes)
# 向后滚动特定的轴到一个特定位置。
numpy.rollaxis(arr, axis, start)
# 用于交换数组的两个轴。
numpy.swapaxes(arr, axis1, axis2)


十,应用

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值