人工智能机器学习之python数据科学必备工具(Numpy,Pandas)

一.科学计算库-Numpy

(1)Numpy概述

Numpy有很多封装好的类库,直接调用就行,不用python自己去实现了。

1)要用numpy库前,首先要把它导入进来。例如 import  numpy  as  np

2)List转成Numpy.ndarray:有时候有些类型数据你不能直接计算,但把它转成numpy结构的数据后就可直接计算了,也就是说numpy已经封装好很多实现了。例如定义了一个list=[1,2,3,4,5],你不能直接对这个list结构中的数据都加1(list +=1);但如果把这list转成numpy里的ndarray类型数据后就可直接加1了。例如 array=np.array([1,2,3,4,5])

print(type(array))

print(array +=1)

这里只是举例了一个加法,同理减法,除法,乘法也一样的道理的。还可以加逻辑判断生成一个新的bool类型的数组呢,最后可用bool值为true对应的值取出来。例如

array=np.array([1,2,3,4,5])

markbool=array>2

print(markbool)

array1=array[markbool]

print(array1)

最终会打印出[3,4,5]来。

那如果我要找到bool值为true对应值的索引位置,怎么办?答案是调用np的where方法。例如

例如

array=np.array([1,2,3,4,5])

markbool=array>2

index=np.where(markbool)

print(index)

3)两个ndarray相加。对应位置上的值进行相加。例如 array1=np.array([1,2,3,4,5])

array2=np.array([0,3,5,4,1])

print(array1+array2)

4)两个ndarray相乘。对应位置的数进行相乘。例如

array1=np.array([1,2,3,4,5])

array2=np.array([0,3,5,4,1])

print(array1*array2)

5)按索引号取出相应元素的值:

例如

array1=np.array([1,2,3,4,5])

print(array1[2])

6)调用ndarray多个属性。例如常用的shape与ndim。

<1>属性shape与定位某个元素

1>shape:表示ndarray中存有几行几列的数据

例如

array1=np.array([1,2,3,4,5])

print(array1.shape)

这个一维的话,打印出来的shape值是(5,)。

如果是二维就会实际多少维就打印出多少行多少列的值。如果是三维的话就会打印出多少行多少行多少列的值。这里的行是指某个维度下有多少样本(例一维数组表示一个样本)。如果是四维的话就会打印出多少行多少行多少行多少列的值。

2>具体定位某个元素。如果是3维数据,那要用[ ][ ][ ]这三组中括号定位到貝体的某一个值,例如[2][1][1]表示第一维的第3个元素(也许是第3个数组),第二维的第2个元素(也许是貝体到某一行的一维数组了),第三维的第2个元素(也许貝体到某一列了)。中括号里的值是索引值,从0开始算起。

<2>ndim:打印出是几维。多少维可从shape值中直观看出来(通过看最开头有几个 [ 就知道了)。注意维度是从最外层[开始算起(axis=0表示第一层),你可以算出每一个维度里有多少行数据就写到对应的shape里。

例如

array1=np.array([1,2,3,4,5])

print(array1.ndim)

也可以用len(array1.shape)得到维度数。

(2)Array数组

1)属性调用

<1>dtype:得到存的数据的貝体类型

例如

array1=np.array([1,2,3,4,5])

print(array1.dtype)

numpy的ndarray下存的数据都是同一类型的,若有不同类型,它会自动向下转型的。例如:

array1=np.array([1,2,3,4,5.0])

print(array1)

print(array1.dtype)

上例中把最后一个5变成5.0后,其它前面的值都会统一转成float类型的。

<2>size:里面一共有多少个元素。例如

array1=np.array([1,2,3,4,5.0])

print(array1.size)

如果是3行3列的二维数据,那它的size值就是3*3=9了。

2)方法调用

<1>fill(新值):把ndarray中的值全部更新成新值。

例如

array1=np.array([1,2,3,4,5.0])

print(array1.fill(0))

<2>切片,即按冒号(:)指定索引区间并取值。索引都是从0开始计算的。

例如

array1=np.array([1,2,3,4,5])

print(array1[1:3])

(3)数组结构

1)矩阵格式(多维形式)

例如

array1=np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]),这样就创建了一个2维矩阵了,这个矩阵是由3行5列组成,所以叫做3行5列的二维矩阵。其中第一维是三个子数组组成,分别是[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5];第二维是有5列组成。

2)矩阵取某个值

<1>可以按前面的所说的几维就按几个中括号[]来表示。例如array1=np.array([[1,2,3,4,5],[10,20,30,40,50]]),这个是二维的,所以array1[1][2]就会取到第2行第3列那个元素的值,是30

<2>对<1>简化,每一维之间用逗号分开(,),例如array1=np.array([[1,2,3,4,5],[10,20,30,40,50]]),如果用array1[1,2]也是取到30,与array1[1][2]结果一样。那如果对于这二维的,如果没有逗号只一个值就表示是取第一维的那一行(样本),例如array1[1]表示取到第二行数据[10,20,30,40,50]。

<3>既然按索引取值,那么就少不了切片(:)来取值,但维度还是用,分开的。例如array1=np.array([[1,2,3,4,5],[10,20,30,40,50]]),如果用array1[:,1]就表示一维来说可取任意的行,二维来说是取第二列,所以array1[:,1]取到的值是[2,20]。那又例如array1[0,0:2]就表示取第一行的前二列的数据为[1,2]。

<4>可按bool值为true对应位置的值取出来。先构建出数据array1=np.array([1,2,3,4,5])

,然后构建出bool类型的数据mark=np.array([1,0,0,1,0],dtype=bool),注意这里指定bool类型的话,大于0的数值都表示true,这个mark的shape与上面的数据array1的shape要一致。最后调用array1[mark]就会得到true对应的值,即得到[1,4]。

3)矩阵赋值

<1>例如array1=np.array([[1,2,3,4,5],[10,20,30,40,50]]),

array2=array1

这样array2会指向array1同一个内存,如果去操作array2,也会相当操作了array1,它没有单独创建出一个array2对象出来,这与我们想像的不一样。

<2>对<1>的解决方法:在赋值过程时,先对原来的矩阵调用copy()方法。相当于先创建一个内存空间,然后把值复制过去,这样两个矩阵间就相互独立,互不干扰了。

例如array1=np.array([[1,2,3,4,5],[10,20,30,40,50]]),

array2=array1.copy()

4)arange(起始值,结束值,相隔多少):构建一个等差数组.例如array1=np.arange(0,100,10)

(4)数组类型

1)dtype:定义时dtype指定数据的数型。例如

array=np.array([1,0,0,1,0],dtype=np.float32)

如果dtype=np.object的话,里面的数据不会向下统一转成同一类型的,可存混合类型的数据,但这样不方便计算,不推荐这样指定。

2)asarray(原数组,dtype=新类型):可以把原数组类型转成新类型的数组。例如array1=np.array([1,2,3,4,5])

array2=np.asarray(array1,dtype=np.float32)

print(array2)

它也可以直接这样:原数组.astype(指定新类型),例如

array1=np.array([1,2,3,4,5])

array2=array1.astype(np.float32)

print(array2)

这二种方式都不会改变原来数组类型。

(5)数值运算

1)求和sum方法

<1>计算矩阵中所有元素之和array1=np.array([[1,2,3,4,5],[1,2,3,4,5]])

value=np.sum(array1)

print(value)

<2>计算矩阵中某一个轴(维度)之和

array1=np.array([[1,2,3],[1,2,3]])

value=np.sum(array1,axis=0)

print(value)

这样打印出的值是[1+1,2+2,3+3],这个就是按列算出和来。同理像对于二维数组若按行轴计算和就只需把axis=0改成1就行。例如

array1=np.array([[1,2,3],[1,2,3]])

value=np.sum(array1,axis=1)

print(value)

这样打印出的值是[1+2+3,1+2+3]

那在高维中,若要按最后一轴来计算,那就用-1表示。

2)求积prod方法

<1>所有数相乘直接用prod()方法。例如

array1=np.array([[1,2,3,4,5],[1,2,3,4,5]])

value=np.prod(array1)

print(value)

<2>计算矩阵中某一个轴(维度)的乘积

array1=np.array([[1,2,3],[1,2,3]])

value=np.prod(array1,axi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_58351028

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值