Python数组中这两行代码是什么意思?

wuxia2118 2020-03-21 09:06:34
一个knn分类算法的基本程序,我想问其中
plt.scatter(x[y==0,0],x[y==0,1],color='red',marker='o')
plt.scatter(x[y==1,0],x[y==1,1],color='green',marker='x')
这两行中的数组是什么意思,我猜想 x[y==0,0],就表示取y值为0的x的第0列,x[y==0,1]就表示取y值为0的x的第1列,是这样吗,为啥python数组中还可出现表达式,

更奇怪的是,x这个数组中根本没包含y这个数组,为啥x数组中可用y的值进行判断呢?

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier#KNN
from sklearn.model_selection import train_test_split #数据分割模块

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
#准备数据集
iris=datasets.load_iris()
X=iris.data
print('X:\n',X)
Y=iris.target
print('Y:\n',Y) #处理二分类问题,所以只针对Y=0,1的行,然后从这些行中取X的前两列
x=X[Y<2,:2]
print(x.shape)
print('x:\n',x)
y=Y[Y<2]
print('y:\n',y)#target=0的点标红,target=1的点标蓝,点的横坐标为data的第一列,点的纵坐标为data的第二列
plt.scatter(x[y==0,0],x[y==0,1],color='red',marker='o')
plt.scatter(x[y==1,0],x[y==1,1],color='green',marker='x')
plt.scatter(5.6,3.2,color='blue',marker='D')
x_1=np.array([[5.6,3.2]])
plt.title('红色点标签为0,绿色点标签为1,待预测的点为蓝色')
knn=KNeighborsClassifier()
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.3)
knn.fit(x,y)
result=knn.predict([[5.6,3.2]])
...全文
150 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhulin0909 2020-03-22
  • 打赏
  • 举报
回复
y==0,执行的结果为返回一个数组行列和y相同的数组,其中等于0的位置为Ture,不等于0的为False,比如 y= np.array([ [1,0,0], [0,2,0], [2,2,2] ]) 表达式y==0的结果为 [ [False True True] [ True False True] [False False False] ] 假设记为resault 假设: x = np.array([ [[11,21,31],[41,51,61],[71,81,91]], [[12,22,32],[42,52,62],[72,82,92]], [[13,23,33],[43,53,63],[73,83,93]] ]) x[y==0]表示x根据resault中对应位置为True的的取出来,即取出值为: [[41 51 61] [71 81 91] [12 22 32] [72 82 92]] 那么x[y==0, 1]表示x[y==0]所得的结果中取出每行中列索引为1的元素,即: [51 81 22 82] 可以看下numpy官方文档说明,关于numpy数组取值、切片的讲解

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧