numpy介绍
numpy属于python的一个数学库,相比于Python做数值计算速度更快.也可以使用numpy进行向量和矩阵计算.
1.ndarrays数据类型的创建
import numpy as np
# 索引以0开始
a = np.array([0, 1, 2, 3, 4])
b = np.array((0, 1, 2, 3, 4))
# 创建生成的序列
c = np.arange( 10, 30, 5 )
# 10 到 30 的数值,不包含30,递增为5
# 产生均匀分布的值构成的数组
d = np.linspace(0, 2*np.pi, 5) # 在 0--2*np.pi 之间均匀选取5个数值
# 生成占位符
e = np.zeros((3,4)) # 生成3*4的二维数组,每个元素都是0,默认是float64
f = np.ones((3,4)) # 生成3*4的二维数组,每个元素都是1,默认是float64
g = np.empty((3,4)) # 生成3*4的二维数组,每个元素都是随机产生呢过的,默认是float64 ,添加dtype参数设置元素类型
# 生成随机数
h = np.random.random((3,4)) # 生成3*4的二维随机数
print(a)
print(b)
print(c)
print(d)
# a, b, c, d 的类型是ndarrays,包括数组、矩阵、张量.
# 矩阵的创建
# 索引以0开始
a = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
print(a[2, 4]) # 输出 25
# 三维张量的创建 3*3*3
b = np.array([[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[
[10, 11, 12],
[13, 14, 15],
[16, 17, 18]],
[
[19, 20, 21],
[22, 23, 24],
[25, 26, 27]]])
print(b[1, 1, 1]) # 输出 14
2、ndarrays的切片
a = np.array([[11, 12, 13, 14, 15, 41],
[16, 17, 18, 19, 20, 42],
[21, 22, 23, 24, 25, 43],
[26, 27, 28, 29, 30, 44],
[31, 32, 33, 34, 35, 45]])
a[ : :-1]
# 一维逆置,二维行(第一维)逆置
print(a[0, 1:4]) # 行下标为0,列下标1-4,第一行,第2,3,4个数值
print(a[1:4, 0]) # 行下标为1-4,列下标为0,第2,3,4行,第1列数值
print(a[::2, ::2]) # 行下标从0开始,以索引2为增量,列下标从0开始,以索引2为增量
print(a[:, 1]) # 所有的行中的第二列,因此只是第二列。
# 当提供比轴数更少的索引时,缺失的索引被认为是一个完整切片 :
>>> b[-1] # 相似于 b[-1,:],如果是多维,后面的轴数被认为是完整索引。
array([40, 41, 42, 43])
# 三个点( ...
)表示产生完整索引元组所需的冒号,如果 x
是rank为的5数组(即,它具有5个轴),例如:
x[1,2,...]
等于x[1,2,:,:,:]
。 # 省略后面x[...,3]
等效于x[:,:,:,:,3]
。 # 省略前面x[4,...,5,:]
等效于x[4,:,:,5,:] # 省略中间
备注:以逗号分割维度
3、ndarrays的属性
print(type(a)) # type()输出变量的类型,<class 'numpy.ndarray'> print(a.dtype) # 输出a中元素的类型,int64 print(a.size) # 输出a中包含元素的个数,25 print(a.shape) # a的形状,每个维度具有的元素个数,2 print(a.itemsize) # 每个元素占用了多少个字节,8字节(64/8) print(a.ndim) # a的维度是多少,2 print(a.nbytes) # a有多少个字节,8*25
4、基础操作
a = np.arange(25) # 产生25个数值,0--24 a = a.reshape((5, 5)) # 改成5*5的矩阵,如果不支持,报错:cannot reshape array of size × into shape (×,×) b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45, 4, 92, 5, 55, 63, 43, 35, 6, 53, 24, 56, 3, 56, 44, 78]) b = b.reshape((5, 5))
a.sum() # 所有元素求和
print(a)
print(b)
print(a + b) # a和b对应元素相加
print(a - b) # a和b对应元素相减
print(a * b) # a和b对应元素相乘
print(a / b) # a和b对应元素相除(浮点数)
print(a ** 2) # a中所有元素的2次方
print(a < b) # a和b对应元素做比较,结果为Boolean值
print(a > b) # a和b对应元素做比较,结果为Boolean值
print(a.dot(b)) # a和b乘法,新矩阵第一个元素是,a的第一行和b的第一列对应元素相乘再相加,后面元素依次类推。
5、迭代
# for ... in ... 多维数组是相对于第一个轴完成的 >>> for row in b: ... print(row) # 是对b第一轴的迭代,如果b是二维数组输出的是,每行数据. # flat 属性 迭代每个元素 >>> for element in b.flat: ... print(element) # 输出的是每个元素