Python 机器学习库 NumPy 教程
0 Numpy简单介绍
Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。如果接触过matlab、scilab,那么numpy很好入手。
NumPy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素。调用mat()函数可以将数组转化为矩阵,输入命令如下:
np.mat(np.random.rand(1,4))
1 安装
pip install numpy
在NumPy中,维度称之为axis(复数是axes),维度的数量称之为rank。
(通用做法import numpu as np 简单输入)
2 多维数组
NumPy的数组类是ndarray,它有一个别名是 numpy.array,但这与Python标准库的array.array并不一样。后者仅仅是一个一维数组。而ndarray具有以下的属性:
ndarray.ndim:数组的维数。在Python世界中,维数称之为rankndarray.shape:数组的维度。这是一系列数字,长度由数组的维度(ndim)决定。例如:长度为n的一维数组的shape是n。一个n行m列的矩阵的shape是n,mndarray.size:数组中所有元素的数量ndarray.dtype:数组中元素的类型,例如numpy.int32,numpy.int16或者numpy.float64ndarray.itemsize:数组中每个元素的大小,单位为字节ndarray.data:存储数组元素的缓冲。通常我们只需要通过下标来访问元素,而不需要访问缓冲
以list或tuple变量为参数产生一维数组:
np.array([1,2,3,4]) np.array((1.2,2,3,4))
以list或tuple变量为元素产生二维数组或者多维数组:
np.array(((1,2,3),(4,5,6))) np.array([[1,2,3],[4,5,6]])
我们也可以在创建数组的时候,指定元素的类型,例如这样:
np.array([[1,2],[3,4]], dtype=complex )
可以使用astype转换类型,在处理文件时候这个会很实用,注意astype 调用会返回一个新的数组,也就是原始数据的一份拷贝。
numeric_strings2 = np.array(['1.23','2.34','3.45'],dtype=np.string_)
print(numeric_strings2)
[b'1.23' b'2.34' b'3.45'] t=numeric_strings2.astype(float)
print(t)
[ 1.23 2.34 3.45]
3 numpy索引(index)与切片(slicing)
- index 和slicing :第一数值类似数组横坐标,第二个为纵坐标;
x=np.array(((1,2,3,4),(5,6,7,8),(9,10,11,12)))
y=x[:,1]
y[0]=20
print(y)
print(x)
结果:

通过上面可以发现改变y会改变x ,因而我们可以推断,y和x指向是同一块内存空间值,系统没有为y 新开辟空间把x值赋值过去。
arr = np.arange(10)
arr[3:6]=10
print(arr)
结果:

思考为什么这么设计? Numpy 设计是为了处理大数据,如果切片采用数据复制话会产生极大的性能和内存消耗问题。
- 假如说需要对数组是一份副本而不是视图可以如下操作:
arr = np.arange(10)
arr_copy = arr[3:6].copy()
print(arr_copy)
arr_copy[:]=24
print(arr_copy)
print(arr)
结果:

- 再看下对list 切片修改(这里设计到python 中深浅拷贝,其中切片属于浅拷贝):
l=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l[5:8] = 12 #报错 TypeError: can only assign an iterable
print(l)
l1= l[5:8]
print(l1)
l1[0]=12
print(l1)
print(l)
结果:

4 多维数组索引(index)、切片(slicing)
arr2d = np.arange(1,10).reshape(3,3)
print(arr2d)
print(arr2d[2])
print(arr2d[0][2])
print(arr2d[0,2])
结果:

5 基本的矩阵运算
转置:
a = np.array([[1,0],[2,3]])
print(a)
print()
print(a.transpose())
结果:

特征值、特征向量:
6 Shape与操作
除了生成数组之外,当我们已经持有某个数据之后,我们可能会需要根据已有数组来产生一些新的数据结构,这时候我们可以使用下面这些函数:
reshape:根据已有数组和指定的shape,生成一个新的数组vstack:用来将多个数组在垂直(v代表vertical)方向拼接(数组的维度必须匹配)hstack:用来将多个数组在水平(h代表horizontal)方向拼接(数组的维度必须匹配)hsplit:用来将数组在水平方向拆分vsplit:用来将数组在垂直方向拆分
7 特定array的创建
在实际上的项目工程中,我们常常会需要一些特定的数据,NumPy中提供了这么一些辅助函数:
zeros:用来创建元素全部是0的数组ones:用来创建元素全部是1的数组empty:用来创建未初始化的数据,因此是内容是不确定的arange:通过指定范围和步长来创建数组linespace:通过指定范围和元素数量来创建数组random:用来生成随机数
参考:
Python 机器学习库 NumPy 教程的更多相关文章
- Python 数据处理库pandas教程(最后附上pandas_datareader使用实例)
0 简单介绍 pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有 ...
- Python机器学习库sklearn的安装
Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...
- 常用python机器学习库总结
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
- [Python] 机器学习库资料汇总
声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...
- [resource]Python机器学习库
reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块: ...
- Python机器学习库scikit-learn实践
原文:http://blog.csdn.net/zouxy09/article/details/48903179 一.概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得 ...
- python常用库 - NumPy 和 sklearn入门
Numpy 和 scikit-learn 都是python常用的第三方库.numpy库可以用来存储和处理大型矩阵,并且在一定程度上弥补了python在运算效率上的不足,正是因为numpy的存在使得py ...
- 【机器学习】--Python机器学习库之Numpy
一.前述 NumPy(Numerical Python的缩写)是一个开源的Python科学计算库.使用NumPy,就可以很自然地使用数组和矩阵. NumPy包含很多实用的数学函数,涵盖线性代数运算.傅 ...
- Python机器学习库和深度学习库总结
我们在Github上的贡献者和提交者之中检查了用Python语言进行机器学习的开源项目,并挑选出最受欢迎和最活跃的项目. 1. Scikit-learn(重点推荐) www.github.com/sc ...
随机推荐
- CF1204E Natasha, Sasha and the Prefix Sums(组合数学)
做法一 \(O(nm)\) 考虑\(f(i,j)\)为i个+1,j个-1的贡献 \(f(i-1,j)\)考虑往序列首添加一个\(1\),则贡献\(1\times\)为序列的个数:\(C(j+i-1,i ...
- ZR#1012
## ZR#1012 blog咕咕咕了好久,开始补. 解法: 一个很显然的性质, $ x $ 只能转移到 $ x+1 $ 或者 $ 2x $ 处,所以我们可以以此性质建图,即 $ x $ 向 $ x ...
- SpringMVC返回一个JSON对象到界面
首先明确,在JavaScript中并没有类型这一说,只有一个类型就是var.我们要做的就是让JavaScript得到我们返回的一个对象让它以某种方式去处理数据. 前端代码 后台代码 @RequestB ...
- ubuntu之路——day10.3 train/dev/test的划分、大小和指标更新
train/dev/test的划分 我们在前面的博文中已经提到了train/dev/test的相关做法.比如不能将dev和test混为一谈.同时要保证数据集的同分布等. 现在在train/dev/t ...
- Mybatis笔记(二)
目录 MyBatis 逆向工程 MyBatis Generator 使用 分页插件 1.下载分页插件 2.配置分页插件 3.使用分页插件 SSM整合(spring与springMVC) 1.创建web ...
- vue+elementui搭建后台管理界面(5递归生成侧栏路由)
有一个菜单树,顶层菜单下面有多个子菜单,子菜单下还有子菜单... 这时候就要用递归处理 1 定义多级菜单 修改 src/router/index.js 的 / 路由 { path: '/', redi ...
- PostgreSQL定时自动备份
PostgreSQL定时自动备份 简介 PostgreSQL数据库中未提供数据库的定时备份功能,所以需要结合备份和定时job功能来共同实现. 这里我选取了2种定时job方式,crontab是Linux ...
- MySQL - \g 和 \G用法与区别
[1]DOS环境下 ① \g 可同时(单独)使用\g; 其作用等效于分号—’:’ : ② \G 可同时(单独)使用\G;; /G 的作用是将查到的结构旋转90度变成纵向:
- 全新的Unity跨平台开发 IDE JetBrains Rider 2019.2 x64特别版下载
Rider 基于 JetBrains 的平台,JetBrains 的平台很受那些使用 IntelliJ IDEA 的 Java 开发者和使用 WebStorm 的 JavaScript 开发者的欢迎. ...
- 005 Spring和SpringBoot中的@Component 和@ComponentScan注解
今天在看@ComponentScan,感觉不是太理解,下面做一个说明. 1.说明 ComponentScan做的事情就是告诉Spring从哪里找到bean 2.细节说明 如果你的其他包都在使用了@Sp ...