list
对于每一个元素都需要检查是哪种具体类型,时间损耗大。
L = [i for i in range(10)]
L[5] = “Machine Learning” 不报错
array
存储单一类型元素。以数组方式存储,不看做矩阵,不能进行矩阵运算。
import array
arr = array.array(‘i’,[i for i in range(10)])
arr[5] = “Machine Learning” # 会报错,只能存储单一类型。
numpy.array
存储单一类型元素,但能进行矩阵操作。
加载包
import numpy as np
列表元素赋值
nparr = np.array([i for i in range(10)])
nparr[5] = “Machine Learning” # 会报错,只能存储单一类型。
nparr[5] = 5.0 # 截位,隐式类型转换,按整数5存储
nparr2 = np.array([1,2,3.0]) # float64浮点类型
元素类型检查
通过nparr.dtype检查元素类型
np.zeros() 生成0
np.zeros(10) # 得到由10个浮点0组成的数组array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros(10,dtype=int) # 整数0,参数2设置类型dtype=int
np.zeros((3,5)) # 传入二维的元组,得到3行5列矩阵
np.zeros(shape=(3,5),dtype=int)
np.ones() 生成1
np.full() 指定值矩阵
np.full(shape=(3,5), fill_value=666.6)
np.arange()
参数1:开始点;参数2:终止点(不包含);参数3:步长
np.arange(0,20,2)相当于使用[i for i in range(0,20,2)]
但range中不能使用浮点数。
而np.arange(0,20,0.2)可以正常运行。
np.linspace()
np.linspace(0,20,10) # [0,20]等长截取10个点
random
np.random.randint(0,10)
np.random.randint(4, 8, size=(3, 5)) # size取元组,生成三行五列矩阵,每个元素都是在[4,8)中随机取值
随机数:随机数生成器生成的伪随机数
使用随机种子np.random.seed(),每次生成同样的随机向量。
np.random.seed(666)
np.random.randint(4,8,size=(3,5))
随机浮点数生成
np.random.random((3,5)) #[0,1)之间均匀的浮点数
符合正态分布的浮点数
均值为0,方差为1:np.random.normal()
np.random.normal(0,1,(3,5))
指定均值为10,方差为100的浮点数:np.random.normal(10,100)
参数查询
np.random.normal?
help(np.random.normal)
reshape
np.arange(15).reshape(3,5)
np.arange() 创建一维数组,再通过reshape()转化为二维数组。
x.ndim
查看数组是几维数组
x.shape
返回元组,每个维度里的元素个数
x.size
元素个数
numpy.array的数据访问
使用python数据访问方法
一维数组:x[-1]
多维数组:x[(0,0)] \ x[2,2] 使用元组方式访问
切片访问:获得子数组或子矩阵
x[0:5] 访问[0,5)之间的元素
x[ : : 2] 设置访问步长
x[ : : -1] 倒数访问
x[:2, :3] 二维数组访问,前两行的前三列
不能使用x[:2][:3] [:3]会取x[:2]得到数组中的前三个元素
x[:, 0] #取一列
numpy:通过引用方式获取子矩阵(子矩阵、原矩阵互相影响)
x[:2, :3].copy() # 创建副本,子矩阵与原矩阵脱离关系
reshape:改变维度
x.shape 查看矩阵大小
x.ndim 维度
x.reshape(1,15) 得到1*15矩阵
区分一维向量与二维数组(矩阵):
一维向量:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 只有一个维度 十列一行
reshape(1,10)后得到二维数组:array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) 两个维度 一行十列
x.reshape(-1,10) 行数默认,列数为10
x.reshape(3,-1) 若元素个数除不尽3,每行元素则不固定,报错
数组、矩阵的合并操作 concatenate
-
A = np.array([[1,2,3],[4,5,6]])
np.concatenate([A, A])
=》
array([[1, 2, 3],[4, 5, 6], [1, 2, 3],[4, 5, 6]])
A中有两个样本,每个样本有三个特征;又来两个样本;一共加起来四个样本。 -
np.concatenate([A, A], axis=1)
axis 轴:沿着第二个方向(即列的方向)拼接
=》
array([[1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6]]) -
z = np.array([666, 666, 666])
A二维矩阵 z一维向量,维数不同不能直接拼接
np.concatenate([A, z.reshape(1,-1)])
将z转变为1*3的二维矩阵
np.vstack([A, z]) # 垂直方向堆叠
np.hstack([A, B]) # 水平方向堆叠
分割操作 split
x1, x2, x3 = np.split(x, [3, 7])
分割点以数组形式传入
x1 = x[0:3]
x2 = x[3:7]
x3 = x[7:]
矩阵分割
A1, A2 = np.split(A,[2])
默认以第一个轴(行)分割
upper, lower = np.vsplit(A,[2])
left,right = np.hsplit(A,[2])