python实现在多维数组中挑选符合条件的全部元素
传统思路:用for循环来挑选符合条件的元素,这样十分浪费时间。
代码示例:
fromsklearn.datasets.samples_generatorimportmake_blobs importnumpyasnp importmatplotlib.pyplotasplt #product20samplesanddividethemin4differenttypes X,label_true=make_blobs(n_samples=20,centers=4) print("Data:{:}".format(X)) print("label_true:{:}".format(label_true)) #eliminatetherepeatedelements labels=np.unique(label_true) print("labels:{:}".format(labels)) #plot fig=plt.figure() ax=fig.add_subplot(1,1,1) colors='rgbycm' forindex,eleminenumerate(labels): position=label_true==elem print("position{:}:{:}".format(index,position)) plt.scatter(X[position,0],X[position,1],label="cluster%d"%elem,color=colors[index%len(colors)]) plt.show()
实验结果:
Data:[[6.289872991.19041843] [2.12673463-1.90647309] [-8.562764241.8136798] [2.42611937-3.81970786] [1.83488662-3.10733306] [6.28320138-0.24840258] [-6.748023041.13642657] [2.216816436.28894411] [-7.161006010.04482262] [1.668588473.42225284] [3.199727894.58804196] [-7.370069420.57068008] [0.52465584-2.68794047] [2.710759213.57281778] [5.993432370.0120798] [4.283070334.28727222] [0.73714246-2.38643522] [5.58384782-0.62066592] [-8.44295576-0.05933983] [5.339919841.24833992]] label_true:[02122013133123032010] labels:[0123] position0:[TrueFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalse FalseFalseTrueFalseFalseTrueFalseTrue] position1:[FalseFalseTrueFalseFalseFalseTrueFalseTrueFalseFalseTrue FalseFalseFalseFalseFalseFalseTrueFalse] position2:[FalseTrueFalseTrueTrueFalseFalseFalseFalseFalseFalseFalse TrueFalseFalseFalseTrueFalseFalseFalse] position3:[FalseFalseFalseFalseFalseFalseFalseTrueFalseTrueTrueFalse FalseTrueFalseTrueFalseFalseFalseFalse]
结果分析:
我们可以看出黄色部分的作用,第一行position=label_true==elem的作用是让position在label_true==elem的位置置为True,反之为False,从而得到的position是一个True和False的集合,
而第三行X[position,0],X[position,1]就是选择为True的位置上的横坐标和纵坐标,打印出来。还有点懵?我们用最简单的数组来表示
代码示例
importnumpyasnp a=np.empty(shape=[0,4],dtype=int) a=np.append(a,[[1,2,3,4],[2,3,4,5],[7,8,9,10]],axis=0) position=[True,False,True] print(a) print(a[position,3])
结果:
[[1234] [2345] [78910]] [410]
结果分析:
显然这是一个3行4列的矩阵,我们用position得到的是[a[0],a[2]],然后取a[0]和a[2]的第4个元素,则为4和10.
是不是比用for快多了~~
以上这篇python实现在多维数组中挑选符合条件的全部元素就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。