numpy 是否为零_NumPy教程

1、简介

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,它是Python科学计算的基本包,除了具有科学用途外,还可以作为通用数据的高效多维容器。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

相关链接

  • NumPy 官网 http://www.numpy.org/
  • NumPy 源代码:https://github.com/numpy/numpy

2、安装

pip install numpy

3、ndarray对象

NumPy 的主要对象是 N 维数组对象 ndarray,其中 nd 表示 n 维。它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

NumPy 维度(dimension)被称为轴(axis), 很好理解:有几个轴就是几维数组,符合平时生活中有 x, y 两个坐标轴就是二维空间,再加上 z 轴就是三维空间的概念

例如,3D 空间中的点的坐标 [ 1,2,1 ] 具有一个轴。这个轴有3个元素,即该轴的长度是3。在下面的例子中,数组有两个轴。第一轴的长度为2,第二轴的长度为3。

[[ 1., 0., 0.], [ 0., 1., 2.]]

通俗一点理解:就是多维数组中有几个中括号[] 就是几维,就有一个轴

3.1 基本的构造函数

对于创建 numpy.ndarray,官网上给出了多种创建方式,这里介绍更为常见的两种:

  1. 从 python 数据结构中转化而来,比如 list, tuple 等,np.array(obj)返回np.ndarray对象
  2. 固有的 NumPy ndarray 创建方式,比如 np.arange(), np.ones(), np.zeros() 等,返回np.ndarray对象
# 导入numpy包import numpy as np# 从Python中数据结构中转化而来a = np.array([1, 2, 3])print("a: ", a)  # a:  [1 2 3]# 固有的 NumPy ndarray 创建方式b = np.arange(3)print("b:", b)  # b: [0 1 2]

3.2 基本属性

  • ndim Number of array dimensions.
  • shape 数组的形状
  • size 数组元素总数
  • dtype 一个用来描述数组中元素类型的对象。我们可以使用 Python 标准类型来创建指定该对象,NumPy 也提供了自己的类型,如 numpy.int32, numpy.int16, and numpy.float64等
  • itemsize 数组中每个元素的字节大小
  • T 转置数组
c = np.array([[1, 2, 3],              [4, 5, 6]])# 数组维度c.ndim  # 2# 数组形状c.shape  # (2, 3)# 数组元素个数c.size  # 6# 数组中元素类型c.dtype  # dtype('int32')# 数组的转置c.T# array([[1, 4],#        [2, 5],#        [3, 6]])

4、一维数组

4.1 创建数组

1、np.array() 直接创建
07a4a281ebe897c6924387c97b12eeb2.png
2、使用 np.ones()、np.zeros() 等方法
0e35526267b5a053f3e63a118bd65d21.png

我们在写数组的时候是横着写的,而其实数组是列向量,这样很直观。

4.2 数组运算

1、加减乘除
c0efbdb090fec5a6d6167e26956233fa.png
f8d873a0f3f0d985bcef9e29bd47c789.png
73230e9dd4e1348650c4f1bff0877c70.png
2、数组乘以数值
bb041c319ae028f3deb4c3b2229066c3.png
3、数组索引
c1dab54cfb288a36f434e4249febe636.png
4、数组聚合
a3c47ed0e1cbac64cf783dfe25d85d04.png

上面是一维数组,下面介绍二维维数组也就是矩阵的使用技巧。

5、矩阵

5.1 创建矩阵

1、直接创建
3beb4cee22722da8c0949da30afc04e7.png
2、使用 np.ones()、np.zeros() 等方法
fb0470f5ff4370b425af880b76007e42.png

5.2 矩阵运算

a6fad9cd966b03e22601022691f889e5.png
c564c458be7c5dac19eda145cec300bc.png

5.3 矩阵点积

矩阵点积跟线性代数基本一样,有些抽象,借助示意图能很好理解:

cec54689d30de6c6d29b37b01d1f576b.png

进一步拆分解释:

41ae9cd3510e1e47264b12eac7872bf7.png

5.4 矩阵索引

b0b5f08982e1e4003eb5ab84f76d5ef3.png

5.5 矩阵聚合

1、求最值
24c511bce4375edc5bd212b5305ba573.png
2、按列 / 行聚合
893a7f1cac5cbf60611674222d0fdd61.png

5.6 矩阵转置

2ccb62378a2bd7865309312057584c5d.png

5.7 矩阵重塑

d18c83a297998706d6c76272590e6c2c.png

6、高维数组

6.1 创建多维数组

de5c2697202223d3ec61de58859b6942.png
8ac0764904a6588185dcdf03f1516c7c.png

当您打印三维NumPy数组时,文本输出显示数组的方式与此处不同。NumPy用于打印n维数组的顺序是,最后一个轴是最快的,而第一个是最慢的。这意味着 np.one((4,3,2))将被打印为:

array([[[1., 1.],        [1., 1.],        [1., 1.]],       [[1., 1.],        [1., 1.],        [1., 1.]],       [[1., 1.],        [1., 1.],        [1., 1.]],       [[1., 1.],        [1., 1.],        [1., 1.]]])

7. 基本方法

  • 以下所称的数组均是np.ndarray对象
  • a,b均为(3 * 4)的数组

7.1 比较操作

a == b返回一个(3 * 4)布尔类型的数组c,若a[i, j] == b[i, j],则c[i, j] = True,否则为False

7.2 数据类型转换

a.astype(np.Type)

7.3 形状操作

  1. a.flatten()ora.ravel()将其展开成一维数组
  2. a.reshape()ora.resize()将其重设数组的shape
  3. a.transpose()转置数组

7.4 合并

  1. np.vstack((a, b))ornp.concatenate((a, b), axis=0)纵向合并

  2. np.hstack((a, b))ornp.concatenate((a, b), axis=1)水平合并

  3. np.dstack((a, b))深度合并,会返回一个(3 * 4 * 2)的数组

  4. np.column_stack()

  5. np.row_stack()

7.5 切分

  1. np.hsplit(a, 4)
  2. np.vsplit(a, 3)
  3. np.dsplit(np.dstack((a, b)), 4)
  4. np.split(a, axis=0)

8、实战

实现处理矩阵和向量的数学公式是NumPy的关键用例。这就是为什么NumPy是科学巨蟒社区的宠儿。例如,均方误差公式MSE,它是处理回归问题的有监督机器学习模型的核心:

ee65314b64b4fca96d16dcde8fdc749b.png

在NumPy实现这一点很容易:

d66bc4b788323e9674da4d0e5480d6d2.png

这一点的好处在于,NumPy并不关心预测值和标签是否包含一个或一千个值(只要它们的大小相同)。我们可以通过一个示例,依次遍历该代码行中的四个操作:

09bf641b55d7ec1f308a7ce8d20e6500.png

预测和标签向量都包含三个值。也就是说n的值是3。在我们进行减法运算之后,得到的值如下所示:

d51ed2cc675bd4b7b081482878d9530e.png

然后我们可以将向量中的值平方:

e8684f1f537460ca03139677df940d03.png

现在我们将这些值相加:

48b311977ec686135450a6f5afddd025.png

9、参考链接

  • Numpy教程
  • A Visual Intro to NumPy and Data Representation

e242f4abf020bef4be3f5eb6b8c32a10.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值