Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 特定条件下的散点图_Python_Numpy_Matplotlib_Plot - Fatal编程技术网

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
is
c[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]