机器学习- Numpy基础 吐血整理

Numpy是专门为数据科学或者数据处理相关的需求设计的一个高效的组件。听起来是不是挺绕口的,其实简单来说就2个方面,一是Numpy是专门处理数据的,二是Numpy在处理数据方面很牛逼(肯定比Python原生组件牛逼,否则也不会另外再来搞个Numpy了吧)。其实更加细化的来看其实Numpy最常用的就是矩阵(Matrix)的处理。如何有一点数据处理方面的经验的话,无论你每一条数据有多少个features(特征),它终究是一个二维的矩阵。所以Numpy在数据处理方面是非常常用的。就是简单点理解就是Numpy其实就是封装了Python中的list,Numpy其实就是一个high level的List而已,它没有什么牛逼的,底层还是Python。好了,闲话少扯了,上面的我个人觉得说的有点小啰嗦了,容易把人搞晕了。咱们还是直接看看下面的例子,看看Numpy的创建,索引,函数吧。下面并不包括Numpy的所有功能,具体很多细节,大家要学会看文档,下面的内容主要介绍一些最基本最常用的一些功能,下面的内容只是一个方向指导作用,具体在业务需求中需要用到什么API麻烦还是要大家自己去找文档查看吧。

  • Numpy的创建和结构分析

好了,既然咱们这里要说说Numpy,那咱们就肯定得先有一个Numpy对象啊(如果不知道啥叫对象,麻烦大家直接去看Hello world). 创建Numpy对象的步骤是先导入Numpy库,然后直接调用array()方法。详情请看下面的实例。

import numpy as np
w = np.array([3,0,5])#w is a numpy array
type(w)

上面的代码实例其实就是创建了一个numpy,注意它这里的w的类型已经不是list了,而是ndarray(其实就是numpy data array 的简称)。 w的值也是array([3,0,5])了,而不是直接的[3,0,5]。这里直接就从表象(也就是最直观的方面)区别了numpy array和list的区别了。为了更加直观的展现numpy的结构,下面再用一个二维数组的例子来说明。

a = np.array([[1,2],[3,4],[5,6]])#a is a 2-dimensional numpy array
print(a)

上面这是一个二维的Numpy array。其实如果你仔细看,她就是把Python中的list作为参数传递给了numpy.array()这个方法。a的值如下所示

array([[1, 2],
       [3, 4],
       [5, 6]])

到目前为止,大家肯定心里犯嘀咕了,这TM也没有什么牛逼的啊,比Python中的list搞得还复杂,毕竟Python中的list也可以是一维的也可以是多维的,而且表现形式还更加简单快速,还更加底层,因而运行速度也更加快。如果仅仅是这么简单,说明你们还是太天真,很傻很可爱。哈哈哈哈哈哈,下面我就来说说社会主义的优越性(错了,是Numpy在数据处理中的优越性)

  • Numpy中常用的properties和method

要说Numpy的牛逼之处,就不得不说它提供了丰富的API来快速简单的操作matrix。首先来介绍一下最常用的properties:transpose(T)和shape。这两个properties(不是我装逼,真是忘了中文翻译是啥了,应该叫成员变量还是啥的)。如果你想转置一个矩阵,下面一行代码搞定

a = np.array([[1,2,3],[4,5,6]])
print(a.T)#transpose of matrix a

一行代码搞定矩阵的转置,方便吧,上面代码返回值如下:

array([[1, 4],
       [2, 5],
       [3, 6]])

另外一个重要的特性就是shape啦。这个关键字可以直接返回矩阵的row 和 column,在进行数据预处理前,了解数据的这些特性,可以非常有效的帮助我们了解数据。例如上面我们的a是一个2行3列的矩阵,那么下面的代码就返回(2,3)

a.shape #return a tuple (2,3)

另外,Numpy中有一个非常常用的函数叫做reshape(),它的参数分别是row和column的数量,记住reshape前后,元素的数量要一致,否则会报错。什么意思呢,就是加入一个矩阵a是2*3的矩阵,那么你可以reshape(3,2)或者reshape(6,1),如果你reshape(2,1)它就会报错。还是那上面的例子吧,参看下面的例子

a1 = a.reshape(3,2)
a2 = a.reshape(6,1)

上面的返回值分别是

array([[1, 2],
       [3, 4],
       [5, 6]])

array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])

这个功能是不是很牛逼呢。哈哈。。

  • Index 和 slicing

既然是矩阵,indexing和slicing应该是经常要用到的,在机器学习中,尤其是slicing更是几乎都要用到。首先index的话,既可以直接索引一个元素,也可以索引一行数据或者一列数据。具体的实例如下所示

a = np.array([[1,2,3],[4,5,6]]) #create a 2d numpy array
a[0,1]#retrieve the element in the numpy array a with the index of (row = 0, column = 1)
a[0]#retrieve the first row of the matrix a, the effect is the same as a[0,:]
a[:,1]#retrieve the second column of the matrix a

具体的代码解释就看看上面的注释就行了。这里需要解释一下细节部分就是上面a[0,1]返回的是一个scalar(实数),a[0]和a[:,1]返回的都是一维numpy数组,即使是取的第二列数据,也是一维的而不是二维的。即上面代码的返回值如下:

2
array([1,2,3])
array([2,5])

对于slicing而言,她的返回值的维数始终等于原数组的维数,这句话啥意思呢,简单来说,slicing分割出来的结果,哪怕只是分割一个元素,它的维数也是跟原数组的维数一样。例如分割一个二维数组,无论你怎么分割,它的结果都是二维的。这是跟index最大的一个区别。slicing 的结构是 array[row_start:row_end, column_start:column_end]. 具体的实例如下所示

a[0:1,:]# return the first row, 2d array
a[:,0:1]# return the first column, 2d array
a[0:1,0:1]#return the cross of first row and first column, it is still a 2d numpy array though is a single element

看看上面的分割例子,第一个是只沿着row的方向分割,第二个是只沿着column的方向分割,第三个是即沿着row也沿着column的方向分割。他们的结果的structure都是和a的structure一样,都是二维的。结果如下:

array([[1, 2, 3]])
array([[1],
       [4]])
array([[1]])

总结:最后国际惯例都来个大总结啦。其实在机器学习中numpy的常用用法就上面这些,例如创建,index,slicing,transpose和reshape。这些方法和应用场景是最常见的。虽然前面说了这么多numpy的介绍,但是numpy的库博大精深,数以万计的api等待着大家去探索。哈哈哈,莫慌莫慌。随后numpy相当于封装了Python中的list,但是在后面你们会看见,机器学习的实践中直接操作numpy的几率比较少,因为后面还有更牛逼的处理数据的库,那就是大boss---pandas。 你们也可以理解pandas是对numpy的进一步抽象和封装,使用起来更加方便快捷。所以大家先理解,记住关键是理解numpy的形式和思路就行,不是把上面的内容死记硬背下来,那样没有意义,关键是一种学习的方法和学习的能力。把基本功练扎实了,咱们才能一起一路打怪升级。

原文地址:https://www.cnblogs.com/tangxiaobo199181/p/12121958.html

时间: 2024-10-19 22:17:38

机器学习- Numpy基础 吐血整理的相关文章

Total Commander基础使用教程(吐血整理)

Total Commander基础使用教程(吐血整理) 配置好了Total Commander后,那么开始一段神奇的高效之旅吧!下面奉上吐血整理的Total Commander基础使用教程!(只是整理,不是原创哦) 一. 常用操作 常用的操作如查看.复制.移动.删除退出已经在Total Commander下方列出,选择好文件后单击相应的按钮或是按下相应的快捷键(F3~F7)就可以完成操作.也可以像Windows中那样用鼠标拖动完成,用左键直接在两个窗口间拖运是复制,用右键可以像资源管理器中一样先

《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

第四章 Numpy基础:数组和矢量计算 实话说,用numpy的主要目的在于应用矢量化运算.Numpy并没有多么高级的数据分析功能,理解Numpy和面向数组的计算能有助于理解后面的pandas.按照课本的说法,作者关心的功能主要集中于: 用于数据整理和清理.子集构造和过滤.转换等快速的矢量化运算 常用的数组解法,如排序.唯一化.集合运算等 高效的描述统计和数据聚合/摘要运算 用于异构数据集的合并/连接运算的数据对齐和关系型数据运算 将条件逻辑表述为数组表达式(而不是带有if-elif-else分支

[转]python与numpy基础

来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb python与numpy基础 寒小阳(2016年6月) Python介绍 如果你问我没有编程基础,想学习一门语言,我一定会首推给你Python类似伪代码的书写方式,让你能够集中精力去解决问题,而不是花费大量的时间在开发和debug上同时得益于Numpy/Scipy这样的科学计算库,使得其有非常高效

数据分析(Numpy基础)

数据分析(Numpy基础) 1.什么是数据分析? 数据分析是指,用适当的统计分析方法,对收集来的大量数据进行分析,提取有用信息并形成结论,从而实现对数据的详细研究和概括总结的过程. 2.python做数据分析的常用库 1. numpy 基础数值算法 2. scipy 科学计算 3. matplotlib 数据可视化 4. pandas 序列高级函数 一.numpy概述 1.什么是numpy? 1. Numerical Python,数字的Python,弥补了Python语言所欠缺的数值计算能力.

Java基础知识整理(一)

概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以便于自己的学习.作为个.NET程序猿也可以学习Java ,毕竟技多不压身,学习多也要精通. 开发工具 eclipse ,开发java类似.NET 需要装JDK类似.NET Framework. Java开发工具eclipse设置 1.设置字体:window设置: 2.设置快捷键:window--ke

linux 基础题整理

基础题: 1.查看系统内核版本号及系统名称 2.查看smb服务所用的端口号 3.禁ping 4.查出22端口现在运行什么程序 5.登录提示符前的输出信息"you are welcome!!!" 6.成功登录后自动输出信息"距离全国比赛还剩1天!!!" 7.确认安全终端为tty1 8.取消普通用户的控制台访问的三个权限:reboot.halt.shutdown 9.只允许组ID为10的成员通过su命令改变为root用户 10.禁止Control-Alt-Delete键

DIV+CSS网页布局常用的一些基础知识整理

CSS命名规范一.文件命名规范 全局样式:global.css:框架布局:layout.css:字体样式:font.css:链接样式:link.css:打印样式:print.css: 二.常用类/ID命名规范页 眉:header内 容:content容 器:container页 脚:footer 版 权:copyright 导 航:menu主导航:mainMenu子导航:subMenu 标 志:logo标 语:banner标 题:title侧边栏:sidebar 图 标:Icon注 释:note

PHP语言基础简单整理

1.开始结束标记<? ... ?> 2.定义变量:$变量名 例: $str="锦清笋";不需要指明数据类型 3.输出语句:(1)echo "hello world!";---echo命令(2)print();输出语句,是函数,有返回值.输出成功返回1,失败返回0.(3) printf();格式化输出字符串.例:printf("%d,%f",12,12.3); (4)sprintf();格式化拼接字符串,不是输出语句,只能将字符串拼接.

Kali Linux渗透基础知识整理(二)漏洞扫描

Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网络上传输的数据量. TCP协议 TCP是因特网中的传输层协议,使用三次握手协议建立连接.当主动方发出SYN连接请求后,等待对方回答SYN+ACK ,并最终对对方的 SYN 执行 ACK 确认.这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议. 连接建立 TC