Numpy:
numeric python
简介
标准安装的 Python 中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对
象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有 3 个指针和三个整数对象。
对于数值运算来说这种结构显然比较浪费内存和 CPU 计算时间。
虽然 Python 还提供了一个 array 模块,array 对象和列表不同,它直接保存数值,和 C 语言的一维数组比较类
似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。
NumPy 的诞生弥补了这些不足,NumPy 提供了两种基本的对象:ndarray(N-dimensional array object)和
ufunc(universal function object)。
ndarray 是存储单一数据类型的多维数组,而 ufunc 则是能够对数组进行处理的函数。
Numpy 是 Python 下的一个 library。numpy 最主要的是支持矩阵操作与运算,非常高效是 numpy 的优势,core
为 C 编写。提升了 python 的处理效率,同时 numpy 也是一些与比较流行的机器学习框架的基础。
名词解释:ndarray 是 numpy 的核心数据类型,即(n-dimensional array)多维数组
,tensorflow 中的 tensor(张量),它本质上也多维数组,但这个名字很高大上。因此,理解多维数组对之后的
机器学习会有很大帮助。
安装与导入
pip install numpy
Python 基础升级班
#或者直接安装 Anaconda 环境,自带 numpy
导入
import numpy as np
查看版本
np.version.version
使用帮助
dir(np)
基本数据类型:
类型
类型代码
说明
int8、uint8
i1、u1
有符号和无符号 8 位整型(1 字节)
int16、uint16
i2、u2
有符号和无符号 16 位整型(2 字节)
int32、uint32
i4、u4
有符号和无符号 32 位整型(4 字节)
int64、uint64
i8、u8
有符号和无符号 64 位整型(8 字节)
float16
f2
半精度浮点数
float32
f4、f
单精度浮点数
float64
f8、d
双精度浮点数
float128
f16、g
扩展精度浮点数
complex64
c8
分别用两个 32 位表示的复数
Python 基础升级班
complex128
c16
分别用两个 64 位表示的复数
complex256
c32
分别用两个 128 位表示的复数
bool
object
?
O
布尔型
python 对象
string
Sn
固定长度字符串,每个字符 1 字节,如 S10
unicode
Un 固定长度 Unicode,字节数由系统决定,如 U10
使用 Numpy
构建 ndarray
构建一维数组
n1=np.array([1,2,3])
n1.shape
.
构建二维数组
n2= np.array([[1,2,3],[4,5,6]])
n2.shape
从 Python 数组构建
l1=[1,2,3,4,5]
print (type(l1))
Python 基础升级班
l2=np.array(l1)
print (type(l2))
ndarray 转为 list
l3=list(l2) # ndarray 转为 Python list
print (type(l3))
快速构建 ndarray
序列创建:
np.arange(15)#类似于 python 中的 range,创建一个第一个维度为 15 的 ndarray 对象。
np.arange(2,3,0.1) #起点,终点,步长值。含起点值,不含终点值。
np.linspace(1,10,10) #起点,终点,区间内点数。起点终点均包括在内。
np.arange(0,1,0.1) #0 到 1 之间步长为 0.1 的数组, 数组中不包含 1
np.linspace(0, 1, 5) # 开始:0, 结束 1, 元素数 5。
a11= np.arange(99)
array([ 0. , 0.25, 0.5 , 0.75, 1. ])
list2=np.array((range(5,10),range(5,10)))
t_x=np.linspace(-1,1,100)
t_x
Python 基础升级班
空矩阵
np.empty((6,6))#空的 ndarray,指定其 shape 即可,注意:空不意味着值为 0,而是任何的 value,内存中没
有被初始化的。
对角线矩阵
np.eye(3)# 对角线矩阵
随机数矩阵
np.random.rand(3,2) #随机数矩阵:
a = np.random.rand(5,5)#指定数字矩阵 fill()函数
a.fill(7)
关于随机数方法:
Python 基础升级班
rand:返回均匀分布随机数
randn:返回服从正态分布的随机数
随机打乱矩阵
a11= np.array(range(3))
0,1 矩阵
z= np.zeros((2,3)) #建立 2*3 的 0 值矩阵, 注意:传入参数是一个 tuple,因此别忘了()
z= np.ones((5,7)) #建立 5*7 的 1 值矩阵,注意:传入参数是一个 tuple,因此别忘了()
ones_like#根据某个矩阵的形态创建一个矩阵
指定数字矩阵 fill
a = np.random.rand(5,5)
a.fill(7)
numpy 数据类型及转换
d1=np.array([1,2,3,4,5])
print(d1)
pint(d1.dtype) # Numpy 会自动根据 ndarray 对象中的值判定数据类型,这里为整型。
Python 基础升级班
d1.astype(np.float32)# 如果想把它强制转为浮点型,可以用 astype 函数转换。
np.array([1,2,3,4],dtype=np.float32)# 也可以在创建 ndarray 时,即指定其数据类型
作为类型
ndarray 基本属性
ndarray.ndim
查看 ndarray 的 dimension 维度数。
n1=np.identity(5)
n1.ndim
ndarray.shape
查看 ndarray 的 shape 形状,返回值 是一个 tuple,当维数为 2 维时,返回的是行数、列数、……数组的各个维
(注意和维和维数要区分开)。它是一个数组各个维的长度构成的整数元组。对 n 行 m 列矩阵而言,shape 将是
(n,m)。因此,shape 元组的长度也就是 rank,也是维数 ndim。
ndarray.dtype
查看 ndarray 对象的数据类型
Python 基础升级班
ndarray.size
查看 ndarray 对象中元素的数量
NDArray 取值赋值与维度操作
我们首先创建一个矩阵。
import numpy as np
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
我们手工创建一个二维矩阵名为 a,shape 为(3,4)
接下来我们开始对这个矩阵进行读取
读取
切片读取
还记得 Python 中对列表进行切片访问吗?numpy 对矩阵进行切片访问时也是遵循着同样的规则,只不过 python
的列表中是按一行(一维)方向进行访问,而在 numpy 中是按行,列两个维度进行切片。(如果 ndarray 的 ndim
超过 2,也是遵循同时的方式进行访问)
a[:,:]#第一个冒号代表切出所有的行,第二个冒号代表切出所有的列。这样会比较容易理解。
a[2:,2:]#这里的红框代表选中的行,绿框代表,选中的列。
Python 基础升级班