Python List 及 Numpy基本使用

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])

猜你喜欢

转载自blog.csdn.net/qq_21980099/article/details/82316229