NumPy - 安装方法 基本介绍
NumPy 是一个 Python 包, 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库,Numpy 是 python 用于数据技术最通用的第三方库,其核心优势在于它提供了用于复杂数据对象处理的N维数组的对象类型,以及各类相关的函数和方法。
主要用途:
机器学习模型:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。
图像处理和计算机图形学:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
数学任务:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。
NumPy 前身
Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。
Numpy 核心对象类型是 Ndarray(N-dimension-array),即多维数组。使用 np.array 函数进行创建,根据该函数的规则,传入的参数必须是一个序列(list / tuple 等)。
NumPy 与 Matlab 比较
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。 这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。 但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。
安装方法:
python -m pip install numpy scipy matplotlib ipython jupyter pandas sympy nose -i https://pypi.douban.com/simple/
建议使用用户安装,将–user标志发送给pip。 pip为本地用户安装软件包,并且不写入系统目录。
NumPy - Ndarray 对象
NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。ndarray 中的每个元素在内存中使用相同大小的块。 ndarray 中的每个元素是数据类型对象的对象(称为 dtype)。
从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。
从任何暴露数组接口的对象,或从返回数组的任何方法创建一个 ndarray 对象:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
上面的构造器接受以下参数:
ndarray 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。 内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。
NumPy - 数据类型
NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
NumPy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_,np.float32等。
序号 | 数据类型及描述 |
1. | bool_ 存储为一个字节的布尔值(真或假) |
2. | int_ 默认整数,相当于 C 的long,通常为int32或int64 |
3. | intc 相当于 C 的int,通常为int32或int64 |
4. | intp 用于索引的整数,相当于 C 的size_t,通常为int32或int64 |
5. | int8 字节(-128 ~ 127) |
6. | int16 16 位整数(-32768 ~ 32767) |
7. | int32 32 位整数(-2147483648 ~ 2147483647) |
8. | int64 64 位整数(-9223372036854775808 ~ 9223372036854775807) |
9. | uint8 8 位无符号整数(0 ~ 255) |
10. | uint16 16 位无符号整数(0 ~ 65535) |
11. | uint32 32 位无符号整数(0 ~ 4294967295) |
12. | uint64 64 位无符号整数(0 ~ 18446744073709551615) |
13. | float_ float64的简写 |
14. | float16 半精度浮点:符号位,5 位指数,10 位尾数 |
15. | float32 单精度浮点:符号位,8 位指数,23 位尾数 |
16. | float64 双精度浮点:符号位,11 位指数,52 位尾数 |
17. | complex_ complex128的简写 |
18. | complex64 复数,由两个 32 位浮点表示(实部和虚部) |
19. | complex128 复数,由两个 64 位浮点表示(实部和虚部) |
NumPy - 数组属性
ndarray.shape
:这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print a.shape # (2, 3)
使用 ndarray.shape 调整数组大小:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
print a.shape # (3,2)
NumPy 也提供了 reshape 函数来调整数组大小:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print b.shape # (3,2)
ndarray.ndim
:这一数组属性返回数组的维数。
import numpy as np
a = np.arange(24) # 等间隔数字的数组
print a # [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
print a.ndim # 1
numpy.itemsize
:这一数组属性返回数组中每个元素的字节单位长度。
数组的 dtype 为 int8(一个字节)
import numpy as np
x = np.array([1, 2, 3, 4, 5], dtype=np.int8)
print(x.itemsize) # 1
数组的 dtype 为 float32(4个字节)
import numpy as np
x = np.array([1, 2, 3, 4, 5], dtype=np.float32)
print(x.itemsize) # 4
numpy.flags
:ndarray 对象拥有以下属性。这个函数返回了它们的当前值。
import numpy as np
x = np.array([1, 2, 3, 4, 5])
print(x.flags)
"""
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
"""
NumPy - 数组创建例程
新的 ndarray 对象可以通过任何下列数组创建例程或使用低级 ndarray 构造函数构造。
numpy.empty
:它创建指定形状和 dtype 的未初始化数组。 它使用以下构造函数:
numpy.empty(shape, dtype = float, order = 'C')
构造器接受下列参数:
序号 | 参数及描述 |
1. | Shape 空数组的形状,整数或整数元组 |
2. | Dtype 所需的输出数组类型,可选 |
3. | Order 'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组 |
import numpy as np
x = np.empty([3, 2], dtype=int)
print(x)
"""
[[ 0 0]
[ 0 1071644672]
[ 0 1072693248]]
"""
numpy.zeros
:返回特定大小,以 0 填充的新数组。
numpy.zeros(shape, dtype = float, order = 'C')
比如:含有 5 个 0 的数组,默认类型为 float
import numpy as np
x = np.zeros(5)
print(x)
numpy.ones
:返回特定大小,以 1 填充的新数组。
numpy.ones(shape, dtype = None, order = 'C')
NumPy - 现有数据创建数组
numpy.asarray
:此函数类似于 numpy.array,除了它有较少的参数。 这个例程对于将 Python 序列转换为 ndarray 非常有用。
构造器接受下列参数:
序号 | 参数及描述 |
1. | Shape 空数组的形状,整数或整数元组 |
2. | Dtype 所需的输出数组类型,可选 |
3. | Order 'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组 |
下面的例子展示了如何使用 asarray 函数:
import numpy as np
x = [1, 2, 3]
a = np.asarray(x)
print(a)
numpy.frombuffer
:此函数将缓冲区解释为一维数组。 暴露缓冲区接口的任何对象都用作参数来返回ndarray。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
构造器接受下列参数:
下面的例子展示了 frombuffer 函数的用法:
import numpy as np
s = 'Hello World'
a = np.frombuffer(s, dtype = 'S1')
print(a)
# ['H' 'e' 'l' 'l' 'o' ' ' 'W' 'o' 'r' 'l' 'd']
numpy.fromiter
:此函数从任何可迭代对象构建一个ndarray对象,返回一个新的一维数组。
numpy.fromiter(iterable, dtype, count = -1)
构造器接受下列参数:
以下示例展示了如何使用内置的 range() 函数返回列表对象。 此列表的迭代器用于形成 ndarray 对象:
import numpy as np
list = range(5)
it = iter(list)
# 使用迭代器创建 ndarray
x = np.fromiter(it, dtype=float)
print(x)