【机器学习基础】numpy 简称 np
文章目录
- 1 创建数组知多少
- 1.1 np.array
- 1.2 np.arange
- 1.3 np.random.randint
- 1.4 特殊函数
- 2 数组数据类型
- 2.1 指定&查看数据类型
- 2.2 修改数据类型
- 3 形状操作
- 3.1 查询维度&形状
- 3.2 修改形状
- 3.3 数组叠加
- 3.3.1 垂直叠加
- 3.3.2 水平叠加
- 3.4 数组切割
- 3.4.1 numpy.vsplit
- 3.4.2 numpy.hsplit
- 3.4.3 按列&按行平均切割
- 3.5 矩阵转置
- 3.6 元素个数&所占内存
- 4 索引&切片
- 4.1 一维数组
- 4.2 二维数组
- 4.3 布尔索引
- 5 元素值的替换
- 5.1 索引&切片
- 5.2 条件索引
- 5.3 numpy.where
- 6 广播机制
- 6.1 数组与数字
- 6.2 数组与数组
- 6.2.1 形状一致
- 6.2.2 行数1&列数相等
- 6.2.3 列数1&行数相等
- 7 文件操作
- 7.1 操作CSV文件
- 7.1.1 文件保存
- 7.1.2 读取文件
- 8 NAN&INF
- 8.1 简介
1 创建数组知多少
1.1 np.array
import numpy as nparr = np.array([[1,2,3],[4,5,6]])
print(arr)
print(type(arr))arr = [np.random.randint(0, 10) for i in range(0, 10)]
print(np.array(arr))arr = np.array([np.random.random() for i in range(0, 10)])
print(arr.reshape(2,5))
[[1 2 3][4 5 6]]
<class 'numpy.ndarray'>
[8 1 0 4 7 2 0 5 8 9]
[[0.62979704 0.81936423 0.85718357 0.44829291 0.25603124][0.53717736 0.63534766 0.52938686 0.11660057 0.18793128]]
1.2 np.arange
arr = np.arange(10)
print(arr)arr = np.arange(1, 10)
print(arr)arr = np.arange(1, 10, 2)
print(arr)
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]
1.3 np.random.randint
arr = np.random.randint(0, 10, size=(2, 5))
print(arr)
[[3 3 3 6 5][6 2 7 1 3]]
1.4 特殊函数
# np.zeros((row, col))
arr = np.zeros((3,3))
print(arr)
[[0. 0. 0.][0. 0. 0.][0. 0. 0.]]
# np.ones((row, col))
arr = np.ones((5,5))
print(arr)
[[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]]
# np.full((row, col), value)
arr = np.full((2, 4), 9)
print(arr)arr = np.full((3, 2), 'w')
print(arr)
[[9 9 9 9][9 9 9 9]]
[['w' 'w']['w' 'w']['w' 'w']]
# np.eye(row:int)
# 生成单位矩阵
arr = np.eye(3)
print(arr)
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]
2 数组数据类型
2.1 指定&查看数据类型
import numpy as np
arr = np.array([1,2,3,4,5])
print(arr.dtype)
arr = np.array([1,2,3,4,5], dtype='i1')
print(arr.dtype)
int32
int8
2.2 修改数据类型
arr = np.array([1,2,3,4])
print(arr)
print(arr.dtype)arr = arr.astype('float32')
print(arr)
print(arr.dtype)
[1 2 3 4]
int32
[1. 2. 3. 4.]
float32
3 形状操作
3.1 查询维度&形状
import numpy as np
arr = np.arange(8)
print(arr.ndim)
print(arr.shape)arr = np.array([[1,2,3],[4,5,6]])
print(arr.ndim)
print(arr.shape)arr = np.array([[[1,1,1],[1,1,1]], [[1,1,1],[1,1,1]]])
print(arr.ndim)print(arr.shape)
print(arr.shape[0])
print(arr.shape[1])
print(arr.shape[2])
1
(8,)
2
(2, 3)
3
(2, 2, 3)
2
2
3
3.2 修改形状
import numpy as np
arr = np.arange(10)
# 1 原来模样
print('一、原来摸样')
print(arr, '\n')# 2 逢场作戏
print('二、array.reshape逢场作戏')
print(arr.reshape(2,5))
print(' 依旧是没事人')
print(arr, '\n')# 3 真枪实干
print('三、array.shape真枪实干')
arr.shape = (5, 2)
print(arr, '\n')print('四、array.resize真枪实干')
arr.resize(2,5)
print(arr, '\n')# 4 将数组压平
print('五、array.flatten压平乐')
aa = arr.flatten()
print('这是array.flatten返回结果的拷贝,对其修改不会影响原数组')
aa[0] = 10
print(aa, '\n')
print('原数组\n', arr, '\n')print('六、arr.ravel压平勒')
bb = arr.ravel()
print('这是array.ravel返回的视图,对其修改会影响原数组')
bb[0] = 11
print(bb, '\n')
print('原数组\n', arr, '\n')
一、原来摸样
[0 1 2 3 4 5 6 7 8 9] 二、array.reshape逢场作戏
[[0 1 2 3 4][5 6 7 8 9]]依旧是没事人
[0 1 2 3 4 5 6 7 8 9] 三、array.shape真枪实干
[[0 1][2 3][4 5][6 7][8 9]] 四、array.resize真枪实干
[[0 1 2 3 4][5 6 7 8 9]] 五、array.flatten压平乐
这是array.flatten返回结果的拷贝,对其修改不会影响原数组
[10 1 2 3 4 5 6 7 8 9] 原数组[[0 1 2 3 4][5 6 7 8 9]] 六、arr.ravel压平勒
这是array.ravel返回的视图,对其修改会影响原数组
[11 1 2 3 4 5 6 7 8 9] 原数组[[11 1 2 3 4][ 5 6 7 8 9]]
3.3 数组叠加
3.3.1 垂直叠加
# 垂直叠加列数需相同
import numpy as np
v1 = np.random.randint(0, 10, size=(3, 4))
v2 = np.random.randint(0, 10, size=(2, 4))
print(v1, '\n')
print(v2, '\n')v3 = np.vstack([v1, v2])
print(v3, '\n')v3 = np.concatenate([v2, v1], axis=0)
print(v3)v1 = np.eyes(3)
v2 = np.
[[3 8 9 3][2 9 5 2][0 2 6 5]] [[9 5 6 5][7 1 5 8]] [[3 8 9 3][2 9 5 2][0 2 6 5][9 5 6 5][7 1 5 8]] [[9 5 6 5][7 1 5 8][3 8 9 3][2 9 5 2][0 2 6 5]]
3.3.2 水平叠加
# 水平叠加行数需相同
import numpy as np
h1 = np.random.randint(0, 10, size=(4,3))
h2 = np.random.randint(0, 10, size=(4,2))print(h1, '\n')
print(h2, '\n')h3 = np.hstack([h1, h2])
print(h3, '\n')
h3 = np.concatenate([h2,h1], axis=1)
print(h3, '\n')
[[2 3 4][8 4 9][1 2 6][0 7 9]] [[2 8][1 4][4 3][8 8]] [[2 3 4 2 8][8 4 9 1 4][1 2 6 4 3][0 7 9 8 8]] [[2 8 2 3 4][1 4 8 4 9][4 3 1 2 6][8 8 0 7 9]]
print('数组压平后,拼接')
h1 = np.eye(3)
h2 = np.random.randint(0, 10, size=(3, 3))
h3 = np.concatenate([h1,h2], axis=None)
print(h1, '\n')
print(h2, '\n')print(h3)
数组压平后,拼接
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]] [[6 1 5][9 6 4][9 4 2]] [1. 0. 0. 0. 1. 0. 0. 0. 1. 6. 1. 5. 9. 6. 4. 9. 4. 2.]
3.4 数组切割
3.4.1 numpy.vsplit
垂直叠加的逆运算
import numpy as npvs1 = np.random.randint(0, 10, size=(4, 3))
print(vs1, '\n')# 指定分割成几份
print('按行分割,指定平均分割成四份')
vs2, vs3, vs4, vs5 = np.vsplit(vs1, 4)
print(vs2, '\n')
print(vs3, '\n')
print(vs4, '\n')
print(vs5, '\n')# 指定分割处的下标值
print('在1,2行前各划一刀')
vs2, vs3, vs4 = np.vsplit(vs1, (1, 2))
print(vs2, '\n')
print(vs3, '\n')
print(vs4, '\n')
[[6 5 7][9 8 1][0 4 5][1 3 1]] 按行分割,指定平均分割成四份
[[6 5 7]] [[9 8 1]] [[0 4 5]] [[1 3 1]] 在1,2行各划一刀
[[6 5 7]] [[9 8 1]] [[0 4 5][1 3 1]]
3.4.2 numpy.hsplit
水平叠加的逆运算
import numpy as nphs1 = np.random.randint(0, 10, size=(3, 4))
print(hs1, '\n')# 指定分割成几份
print('按列分割,指定平均分割成两份')
hs2, hs3 = np.hsplit(hs1, 2)
print(hs2, '\n')
print(hs3, '\n')# 指定分割处的下标值
print('在1,2列前各划一刀')
hs2, hs3, hs4 = np.hsplit(hs1, (1, 2))
print(hs2, '\n')
print(hs3, '\n')
print(hs4)
[[6 1 4 8][5 7 0 4][5 6 6 3]] 按列分割,指定平均分割成两份
[[6 1][5 7][5 6]] [[4 8][0 4][6 3]] 在1,2列前各划一刀
[[6][5][5]] [[1][7][6]] [[4 8][0 4][6 3]]
3.4.3 按列&按行平均切割
import numpy as nphs1 = np.random.randint(0,10,size=(3, 4))
print(hs1, '\n')
hs2, hs3, hs4, hs5 = np.split(hs1, 4, axis=1)
print(hs2, '\n')
print(hs3, '\n')
print(hs4, '\n')
print(hs5)
[[7 8 7 2][0 4 8 1][1 1 7 2]] [[7][0][1]] [[8][4][1]] [[7][8][7]] [[2][1][2]]
import numpy as npvs1 = np.random.randint(0,10,size=(3,4))
print(vs1, '\n')
vs2,vs3,vs4 = np.split(vs1, 3, axis=0)
print(vs2, '\n')
print(vs3, '\n')
print(vs4)
[[5 5 0 1][9 6 8 5][3 0 2 2]] [[5 5 0 1]] [[9 6 8 5]] [[3 0 2 2]]
3.5 矩阵转置
arr = np.random.randint(0,10,size=(3,4))
print(arr, '\n')print(arr.T)
[[6 0 7 3][8 2 4 4][6 1 7 5]] [[6 8 6][0 2 1][7 4 7][3 4 5]]
print(arr, '\n')arr1 = arr.transpose()
arr1[1,2] = 10
print(arr1, '\n')
print(arr)
[[6 0 7 3][8 2 4 4][6 1 7 5]] [[ 6 8 6][ 0 2 10][ 7 4 7][ 3 4 5]] [[ 6 0 7 3][ 8 2 4 4][ 6 10 7 5]]
3.6 元素个数&所占内存
import numpy as np
arr = np.array([[[1, 2, 3],[3, 4, 5]],[[7, 8, 9],[10,11,12]]
])
# 元素个数
print('元素个数:', arr.size)
# 各元素所占内存
print('各元素所占内存:', arr.itemsize)
# 数组所占内存
print('数组所占内存:', arr.size * arr.itemsize)
元素个数: 12
各元素所占内存: 4
数组所占内存: 48
4 索引&切片
4.1 一维数组
import numpy as np
arr = np.arange(10)print(arr)# 完整数组print(arr[1])# 索引print(arr[-2])# 倒着索引print(arr[1: 5])# 切片print(arr[: : 2])# 设置步长print(arr[9:0:-1])# 倒着切片
[0 1 2 3 4 5 6 7 8 9]
1
8
[1 2 3 4]
[0 2 4 6 8]
[9 8 7 6 5 4 3 2 1]
4.2 二维数组
import numpy as np
arr = np.random.randint(0, 10, size=(3, 4))print(arr) # 原数组
[[3 0 9 5][0 5 4 2][3 8 3 0]]
# 默认所有列
print(arr[0], '\n') # 获取单行
print(arr[[0,1]]) # 获取多行
[3 0 9 5] [[3 0 9 5][0 5 4 2]]
print(arr[0,1], '\n') # 获取指定位置的元素
print(arr[[0,1],[1,2]], '\n') # 0,1行与1,2列交叉处
print(arr[1:, 1:3], '\n') # 1行及之后的行与1列到3列之前的交叉
print(arr[[0,1],:], '\n') # 0,1行所有列
print(arr[:,[1,2]]) # 1,2列所有行
0 [0 4] [[5 4][8 3]] [[3 0 9 5][0 5 4 2]] [[0 9][5 4][8 3]]
4.3 布尔索引
import numpy as np
arr = np.arange(10).reshape(2,5)
print(arr, '\n')
print(arr[arr>5])
[[0 1 2 3 4][5 6 7 8 9]] [6 7 8 9]
import numpy as np
arr = np.arange(20).reshape(4,5)
print(arr, '\n')
print(arr[(arr>6) & (arr<15)]) # 条件多的时候,圆括号,&表示且,|表示或
[[ 0 1 2 3 4][ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19]] [ 7 8 9 10 11 12 13 14]
5 元素值的替换
5.1 索引&切片
import numpy as np
arr = np.arange(10)
print(arr, '\n')arr[1] = 7
print(arr, '\n')arr[1:] = 0
print(arr, '\n')
[0 1 2 3 4 5 6 7 8 9] [0 7 2 3 4 5 6 7 8 9] [0 0 0 0 0 0 0 0 0 0]
import numpy as np
arr = np.arange(20).reshape(4, 5)
print(arr, '\n')arr[0] = np.zeros((1, 5)) # 列数要相等
print(arr)
[[ 0 1 2 3 4][ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19]] [[ 0 0 0 0 0][ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19]]
5.2 条件索引
import numpy as np
arr = np.arange(20).reshape(4, 5)
print(arr, '\n')# 小试牛刀,将数组中小于11的元素全都替换为1
arr[arr < 11] = 1
print(arr)
[[ 0 1 2 3 4][ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19]] [[ 1 1 1 1 1][ 1 1 1 1 1][ 1 11 12 13 14][15 16 17 18 19]]
5.3 numpy.where
import numpy as np
arr = np.arange(20).reshape(4,5)
# 小试牛刀,将数组中小于10的元素替换为0,其余替换为1
res = np.where(arr<10, 0, 1)
print(res)
[[0 0 0 0 0][0 0 0 0 0][1 1 1 1 1][1 1 1 1 1]]
6 广播机制
6.1 数组与数字
import numpy as np
arr = np.arange(10).reshape(2,5)print(arr,'\n')
print(arr*2, '\n')
[[0 1 2 3 4][5 6 7 8 9]] [[ 0 2 4 6 8][10 12 14 16 18]]
6.2 数组与数组
6.2.1 形状一致
import numpy as np# 数组形状需一致
a1 = np.random.randint(0, 10, size=(3,4))
a2 = np.random.randint(0, 10, size=(3,4))
print(a1, '\n')
print(a2, '\n')
print(a1 + a2, '\n')
[[3 3 0 1][4 7 1 8][6 1 4 1]] [[1 9 9 0][3 4 7 1][6 6 0 2]] [[ 4 12 9 1][ 7 11 8 9][12 7 4 3]]
6.2.2 行数1&列数相等
a1 = np.random.randint(0,10,size=(3,4))
a2 = np.arange(4)
print(a1, '\n')
print(a2, '\n')
print(a1 + a2, '\n')
[[0 7 2 6][4 3 2 0][2 3 5 9]] [0 1 2 3] [[ 0 8 4 9][ 4 4 4 3][ 2 4 7 12]]
6.2.3 列数1&行数相等
a1 = np.random.randint(0,10,size=(3,4))
a2 = np.arange(3).reshape(3,1)
print(a1, '\n')
print(a2, '\n')
print(a1 + a2)
[[0 7 4 2][0 0 6 1][9 7 5 0]] [[0][1][2]] [[ 0 7 4 2][ 1 1 7 2][11 9 7 2]]
7 文件操作
7.1 操作CSV文件
7.1.1 文件保存
numpy.savetxt(frame, array, fmt='%.18e', delimiter='', newline='n', footer='', comments='#')
- frame :文件或文件句柄
- array :一维或二维数组
- fmt :格式序列
- delimiter :分隔符
- newline :换行符
- header :写在文件开头
- footer :写在文件末尾
- comments :header和footer的标记
import numpy as npscores = np.random.randint(0,100,size=(10,2))np.savetxt('score.csv', scores, fmt='%d', delimiter=',', header='English,Math', comments='')
7.1.2 读取文件
numpy.loadtxt(frame, dtype=np.float, delimiter='', uppack=False)
- frame
- dtype
- dlimiter
- uppack
b = np.loadtxt('score.csv', dtype=np.int, delimiter=',', )
8 NAN&INF
8.1 简介
NAN:Not A Number,虽然不是一个数,但是它是浮点类型
INF:Infinity,无穷大。np.inf表示无穷大,-np.inf表示负无穷大
import numpy as np
print(np.NAN != np.NAN) # NAN与NAN不相等print(np.NAN + 2) # 与任何值做运算
True
nan
【机器学习基础】numpy 简称 np相关推荐
- 机器学习基础 --- numpy的基本使用
一.numpy的简介 numpy是Python的一种开源的数值计算扩展库.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该 ...
- python机器学习基础--numpy库
目录 numpy库 数据维度的python表示 数组对象ndarray 数组创建与变换 数组变换 数组操作 数组运算 numpy数据存取 csv文件存储 案例1:使用下面代码生成一个csv文件[^1] ...
- 机器学习笔记(一)numpy的使用、机器学习基础概念
目录 1.numpy 1.1.创建 numpy.array 1.1.1.常规创建 numpy.array 的方法 1.1.2.其他创建 numpy.array 的方法 1.1.2.其他创建随机数 ra ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost
Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...
- 集成学习(上):机器学习基础task1-熟悉机器学习的三大主要任务
机器学习基础task1-熟悉机器学习的三大主要任务 1.导论 1.1 回归 1.2 分类 1.3 无监督学习 学习内容来源链接 1.导论 什么是机器学习?机器学习的一个重要的目标就是利用数学模型来理解 ...
- Python机器学习基础篇二《监督学习》
前言 前期回顾: Python机器学习基础篇一<为什么用Python进行机器学习> 前面说过,监督学习是最常用也是最成功的机器学习类型之一.本章将会详细介绍监督学 习,并解释几种常用的监督 ...
- 集成学习(上)机器学习基础
集成学习(上)机器学习基础 1.机器学习概念 1.1 机器学习的重要的目标 利用数学模型来理解数据,发现数据中的规律,用作数据的分析和预测. 1.2 机器学习分类 1.机器学习的任务可分为:有监督学习 ...
- 机器学习基础 HMM模型(隐马尔科夫)
文章目录 一.马尔科夫链 1. 简介 2. 经典举例 3. 小结 二.HMM简介 1. 简单案例 2. 三个基本问题 三.HMM模型基础 1. 什么样的问题需要HMM模型 2. HMM模型的定义 3. ...
- 龙珠机器学习训练营机器学习基础知识笔记
本学习笔记为阿里云天池龙珠计划机器学习训练营的学习内容,学习链接为:添加链接描述 学习知识点概要 1.了解 逻辑回归 的理论 2.掌握 逻辑回归 的 sklearn 函数调用使用并将其运用到鸢尾花数据 ...
最新文章
- c语言结构体如何定义字母,c语言中定义结构体如何定义?
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 借助 CORS 从 JavaScript 使用 API 应用
- OpenCV中IplImage/CvMat/Mat转化关系
- 看了这几幅图,感觉自己物理白学了!
- #leetcode刷题之路35-搜索插入位置
- python 速度 memmap_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例
- Burpsuite Web渗透-扫描工具(中间攻击,渗透大牛都用来修改包和监视包)
- 无法移动或重命名“Documents and Settings”文件夹
- 机器学习/深度学习测试题(一) —— 单层感知器的激活函数
- oracle国家字符集
- 深度学习:摩尔纹识别(翻拍检测)
- STM32 485通信芯片引脚应用讲解
- 计算机打字速度在线测试,在线测试打字速度(一分钟打字速度测试)
- ANSYS Products19.1下载及安装教程
- vue在按钮上绑定enter键
- android电视安装app
- RabbitMQ第五个实操小案例——主题交换机(TopicExchange)
- 35岁之后软件测试工程师靠什么养家?我还能继续做测试。
- MinIO杂谈(bucket、对象Object管理、策略policy生成、创建临时用户user)
热门文章
- LeetCode 2065. 最大化一张图中的路径价值
- Ubuntu18.04+python3.6+pcl-1.8+opencv3+realsense D415环境搭建
- PAT Basic Level 1062 最简分数(辗转相除法)
- matplotlib 改变时间刻度间隔 改变时间刻度格式
- oracle10g win7下使用命令启动服务和实例
- PWM调光5V脉冲信号转模拟量信号隔离转换器,PWM控制芯片
- AD18层次原理图绘制
- Vue中 实现文件流格式图片预览
- 塔式计算机sata3内部硬盘,巧用固态硬盘 解决PC用户3大疑难杂症
- Github每日精选(第65期):手机自动化测试工具maestro