Python 特定条件下的散点图
假设我有这个数据集Python 特定条件下的散点图,python,numpy,matplotlib,plot,Python,Numpy,Matplotlib,Plot,假设我有这个数据集 x1 = np.array([0.1,0.3,0.1,0.6,0.4,0.6,0.5,0.9,0.4,0.7]) x2 = np.array([0.1,0.4,0.5,0.9,0.2,0.3,0.6,0.2,0.4,0.6]) c = np.array([ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]) 在以下条件下,我需要x1,x2的散点图:如果(x1[I],x2[I]) 在cisc[i]==1中,然后将此标记绘制为红色X,但如果(x1
x1 = np.array([0.1,0.3,0.1,0.6,0.4,0.6,0.5,0.9,0.4,0.7])
x2 = np.array([0.1,0.4,0.5,0.9,0.2,0.3,0.6,0.2,0.4,0.6])
c = np.array([ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0])
在以下条件下,我需要x1,x2
的散点图:如果(x1[I],x2[I])
在c
isc[i]==1
中,然后将此标记绘制为红色X,但如果(x1[i],x2[i])
中c
的相应索引是c[i]==0
中,则将(x1[i],x2[i])
处的标记绘制为蓝色O
你知道怎么做吗?我不知道这是否有效,但你可以做到
i=0
对于拉链(x1,x2)中的(p1,p2):
如果(c[i]==1):
plt.散射(p1,p2,标记为x,颜色为红色)
其他:
plt.散射(p1、p2,标记为“o”,颜色为“蓝色”)
i+=1
检查此处的其他标记形状
因为您使用的是numpy,所以很容易获得满足特定规则(比较)的元素(或索引) 您可以获得一个布尔值数组,该数组对应于作用于现有数组元素的某些条件:
打印(c==0)
[假假假假真真真]
此外,您只能使用布尔数组访问数组的某些元素(与初始数组的大小相同):
打印(x1[c==1])
[0.1 0.3 0.1 0.6 0.4]
或更复杂的操作和/或设置值:
x1[x2<0.5]=0
打印(x1)
x2[x2<0.5]=10
打印(x2)
对于更为复杂的情况,NumPy阵列也存在一些问题
这种方法(NumPy)比使用循环快得多,您应该尽可能地使用它强>
应用上述方法,您的问题很容易解决:
将numpy导入为np
将matplotlib.pyplot作为plt导入
x1=np.数组([0.1,0.3,0.1,0.6,0.4,0.6,0.5,0.9,0.4,0.7])
x2=np.数组([0.1,0.4,0.5,0.9,0.2,0.3,0.6,0.2,0.4,0.6])
c=np.数组([1,1,1,1,0,0,0,0,0])
plt.图(x1[c==0],x2[c==0],'bo')
plt.图(x1[c==1],x2[c==1],'rx')
这不是一个好的解决方案。即使分数适中,速度也可能非常慢。您可以使用
分散
,但只要有可能,就应该使用numpy的内置条件/索引来完成逻辑条件。是的,谢谢您指出。我看到了你的解决方案,太棒了。
[0. 0. 0.1 0.6 0. 0. 0.5 0. 0. 0.7]
[10. 10. 0.5 0.9 10. 10. 0.6 10. 10. 0.6]