shell散点图_matplotlib学习——绘制散点图+flatten函数用法

在最近学习《机器学习实战时》,在使用matplotlib时,往往是这样:import matplotlib.pyplot as plt

接下来fig=plt.figure() 绘制图表

fig.add_subplot(111)是什么意思呢?

函数是在大的画布中绘制小画布,111表明:将画布分成1行1列,获取从上到下,从左到右第1块小画布。

同理add_subplot(2,3,5)的意思不难理解。如果将画布分成3行4列要在第10块画布作画怎么写呢?add_subplot(3,4,10)即可。

绘图实例:代码来自《机器学习实战》

importmatplotlib.pyplot as plt

dataMat,labelMat=loadDataSet()

dataArr=array(dataMat)

n=shape(dataArr)[0]

x1cord1=[];x2cord1=[]#实际分类为1的样例,其特征对应值存放处

x1cord2=[];x2cord2=[]for i inrange(n):if int(labelMat[i])==1:

x1cord1.append(dataArr[i,1]);x2cord1.append(dataArr[i,2])else:

x1cord2.append(dataArr[i,1]);x2cord2.append(dataArr[i,2])

fig=plt.figure()

ax=fig.add_subplot(111)

ax.scatter(x1cord1,x2cord1,s=30,c='red',marker='s')#scatter用于绘制散点

ax.scatter(x1cord2,x2cord2,s=30,c='green')#至此绘制出了分别属于两类的点

x1=arange(-3.0,3.0,0.1)#arange与range函数类似,不过range函数产生的是list,而arange产生的是array。表明产生-0.3到0.3之间的数,步长为0.1

weightsT=array(weights)

x2=(-weightsT[0]-weightsT[1]*x1)/weightsT[2]#weights是matrix,进行计算后得到的x2也是matrix,而x1是array,所以需要统一.|x1|==|x2|

ax.plot(x1,x2)#调用plot函数绘制得到由点生成的线条

plt.xlabel('X1');plt.ylabel('X2');#为横纵坐标命名

plt.show()

代码中xcord的类型可以是列表,也可以是array。好像是这样,array,list还有matrix的用法需要讨论。

为什么:x2=(-weightsT[0]-weightsT[1]*x1)/weightsT[2]。

因为z=w0+w1*x1+w2*x2(在本例中),将z代入sigmoid函数中求值进而分类,观察sigmoid函数看到自变量为0前后是图像跳跃的点,如下如sigmoid函数图:

UvAAAAABJRU5ErkJggg==

所以z==0为分隔点,令z=0,得到x1与x2之间的关系。运行代码:

得到如下图:

fvyUKVMiX4dCoX379nk8nsceeywUCrW1tdlcK6ASoguwx5YtW3w+386dO6OPHDx4MCcn57777qupqfF4PN5eli9fbmOpgGqILgCAZoguAIBmiC4AgGaILgCAZoguAIBmiC4AgGaILgCAZoguAIBmiC4AgGb+H+dUtzvQUwKjAAAAAElFTkSuQmCC

添加flatten函数的用法:

部分内容来自http://blog.csdn.net/maoersong/article/details/23823925

flatten函数可以用在array与matrix上,但是不可用在list上:

1:用在array:

>>> a = [[1,3],[2,4],[3,5]]>>> a =array(a)>>>a.flatten()

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

2、用在列表:直接使用报错

>>> a = [[1,3],[2,4],[3,5]]>>>a.flatten()

Traceback (most recent call last):

File"", line 1, in a.flatten()

AttributeError:'list' object has no attribute 'flatten'

如下为正确用法:

>>> a = [[1,3],[2,4],[3,5],["abc","def"]]>>> a1 = [y for x in a for y inx]>>>a1

[1, 3, 2, 4, 3, 5, 'abc', 'def']

3、用在矩阵:

>>> a = [[1,3],[2,4],[3,5]]>>> a =mat(a)>>> y =a.flatten()>>>y

matrix([[1, 3, 2, 4, 3, 5]])>>> y =a.flatten().A>>>y

array([[1, 3, 2, 4, 3, 5]])>>>shape(y)

(1, 6)>>>shape(y[0])

(6,)>>> y =a.flatten().A[0]>>>y

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

在绘制图像,需要部分数据时,可以首先获取需要的矩阵中的一列数,然后通过调用flatten函数转成单行矩阵,再调用.A,获取二维array形式,获取下标为0的元素。此时得到单维array形式,可以在ax.scatter中作为参数,绘制图形。

B4JGECWlqEFNAAAAAElFTkSuQmCC

得到图形如下:

D3nfELVYuzzUAAAAAElFTkSuQmCC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值