(四)numpy知识学习1-python数据分析与机器学习实战(
2018-04-28 本文已影响64人
努力奋斗的durian
文章原创,最近更新:2018-04-28
1.科学计算库numpy
2.numpy基础结构
课程来源: python数据分析与机器学习实战-唐宇迪
1.科学计算库numpy
数据是由一行一列交叉组成的.矩阵的形式比较方便,而且效率也比较高.numpy是专门做矩阵计算的一个库.以及其他很多的操作.
首先要确保numpy是否安装好,安装方法:pip install numpy
而ananconda是默认numpy是安装好的.
1.1Python科学计算——Numpy.genfromtxt介绍
genfromtxt函数的完整形式为:
numpy.genfromtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None)[source]¶
函数属性介绍:
今天先介绍几个一定会用到的属性:
- fname,顾名思义,就是文件名,不详述
- delimiter:str,int,or sequence,optional.他是分割值,即表示你的数组用什么来分割。
- usecols,即选择读哪几行,在讲文件读入代码的时候,我们通常是将属性集读为一个数组,此时它就派上用场了
- dtype,表明改行类型
如果你还有必要知道它的其他的参数,你可以参考它的官方文档
例子1:
from numpy import genfromtxt,zeros
data=genfromtxt('iris.csv',delimiter=',',usecols=(0,1,2,3))
target=genfromtxt('iris.csv',delimiter=',',usecols=(4),dtype=str)
例子2:
import numpy
world_alcohol=numpy.genfromtxt("world_alcohol.txt",delimiter=",")
print(type(world_alcohol))
print(world_alcohol)
输出结果:
<class 'numpy.ndarray'>
[[ nan nan nan nan nan]
[1.986e+03 nan nan nan 0.000e+00]
[1.986e+03 nan nan nan 5.000e-01]
...
[1.987e+03 nan nan nan 7.500e-01]
[1.989e+03 nan nan nan 1.500e+00]
[1.985e+03 nan nan nan 3.100e-01]]
拓外1:
help() 函数用于查看函数或模块用途的详细说明。
- 描述
help() 函数用于查看函数或模块用途的详细说明。 - 语法
help 语法: - 参数说明:
object -- 对象; - 返回值
返回对象帮助信息。
import numpy
world_alcohol=numpy.genfromtxt("world_alcohol.txt",delimiter=",")
print(help(numpy.genfromtxt))
输出结果:
1.2numpy.array()函数的介绍
- 这个数组是numpy最核心的内容.比如:将list转化成ndarray矩阵的格式,
构造一维写一个中括号,构造二维写2个中括号.
>>> import numpy
>>> vector=numpy.array([5,10,15,20])
>>> matrix=numpy.array([[5,10,15],[20,25,30],[35,40,45]])
>>> vector
array([ 5, 10, 15, 20])
>>> matrix
array([[ 5, 10, 15],
[20, 25, 30],
[35, 40, 45]])
1.3shape函数的介绍
它的功能是查看矩阵或者数组的维数。
运用在神经网络或算法的时候,并不很清楚中间的流程做了什么事,通过一个中间结果的shape长什么样.通过.shape一方面方便于理解,另外一方面bug的时候,找了很长时间没发现问题,最好的办法是能把shape打印的东西全部打印出来.重头到尾推一遍,哪个shape有问题.没准我们就能找到这个错误.
>>> import numpy
>>> vector=numpy.array([5,10,15,20])
>>> vector.shape
(4,)
>>> import numpy
>>> matrix=numpy.array([[5,10,15],[20,25,30],[35,40,45]])
>>> matrix.shape
(3, 3)
2.numpy基础结构
2.1数据类型的更改
-
numpy.arry里面的所有元素都是同一类型,只要改了numpy.arry里面其中的一个元素.里面的元素都会变成通一个类型的转换.
比如里面其中的某个元素由整数改为小数,输出的结果全部都是小数类型.
>>> import numpy
>>> vector=numpy.array([5,10,15,20])#整数类型
>>> vector
array([ 5, 10, 15, 20])
>>> vector.dtype
dtype('int32')
>>> vector1=numpy.array([5.1,10,15,20])#改成小数类型
>>> vector1
array([ 5.1, 10. , 15. , 20. ])
>>> vector1.dtype
dtype('float64')
>>> vector2=numpy.array(["5",10,15,20])#改成字符串类型
>>> vector2
array(['5', '10', '15', '20'], dtype='<U2')
>>> vector2.dtype
dtype('<U2')
- 通过dtype函数可以知道元素是什么类型的.
元素的类型 dtype(‘int32’)
2.2数据类型的选取
通过索引和切片的的方式对数据进行选取,跟python是一模一样的.
索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程.
>>> print(world_alcohol)
[['1986' 'Western Pacific' 'Viet Nam' 'Wine' '0']
['1986' 'Americas' 'Uruguay' 'Other' '0.5']
['1985' 'Africa' "Cte d'Ivoire" 'Wine' '1.62']
...
['1987' 'Africa' 'Malawi' 'Other' '0.75']
['1989' 'Americas' 'Bahamas' 'Wine' '1.5']
['1985' 'Africa' 'Malawi' 'Spirits' '0.31']]
- 获取数组的某个值
以上数据相当于是矩阵类型的方式.想选取矩阵其中的一个数据,比如最后一列中的 '0.5'以及"Cte d'Ivoire"这个数字,应该怎么选取?
>>> uruguay_other_1986=world_alcohol[1,4]#取其中的某个值
>>> uruguay_other_1986
'0.5'
>>> third_country = world_alcohol[2,2]#取其中的某个值
>>> third_country
"Cte d'Ivoire"
- 获取数组的某一列
:表示所有
一维数组
>>> vector=numpy.array([5,10,15,20])
>>> vector
array([ 5, 10, 15, 20])
>>> vector[0:3]
array([ 5, 10, 15])#获取第0,1,2列的数组
二维数组
>>> matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
>>> matrix[:,1]#获取第1列的数组
array([10, 25, 40])
>>> matrix[:,0:2]#获取第0列,第1列的数组
array([[ 5, 10],
[20, 25],
[35, 40]])
>>> matrix[1:3,0:2]#获取第1行/2行与第0列/第1列交叉的数组
array([[20, 25],
[35, 40]])
2.3判断数值是否在数组
对numpy .arry()无论进行什么样的操作,相当于对每个元素进行同样的操作.
一维数组
>>> import numpy
>>> vector=numpy.array([5,10,15,20])
>>> vector==10
array([False, True, False, False])
二维数组
当前二维矩阵是否有等于25的数.
>>> matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
>>> matrix==25
array([[False, False, False],
[False, True, False],
[False, False, False]])
得到布尔值的作用:
此部分的内容不是很理解,暂时先放着.
能不能将得到的布尔值当成索引呢?
可以将布尔值当成一个索引,可以将一个真实的值返回出来.
一维数组
>>> vector=numpy.array([5,10,15,20])
>>> equal_to_ten=(vector==10)
>>> equal_to_ten
array([False, True, False, False])
>>> vector(equal_to_ten)
>>> vector[equal_to_ten]
array([10])
>>>
二维数组
>>> matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
>>> second_column_25=matrix[:,1]==25
>>> second_column_25
array([False, True, False])
>>> matrix[second_column_25,:]
array([[20, 25, 30]])