Python 如何用不等式分割numpy数组?

Python 如何用不等式分割numpy数组?,python,numpy,matplotlib,astronomy,multidimensional-array,Python,Numpy,Matplotlib,Astronomy,Multidimensional Array,我已经尽了我最大的努力去寻找一个自己的解决方案,但我只是没有找到任何相关的东西。我有一些从.tbl文件中提取的numpy数组(这是一种天文表格式,我用atpy提取)。每个数组中大约有25000个数字,我用matplotlib将它们绘制为散点图。y轴值直接来自数组,x轴是两个单独数组中值的简单减法 这很好,但我真正需要做的是提取某个范围内的值(例如,我需要y的值在10到13之间,x的值在0到1之间)。当然,为了使绘图有效,这些值必须相互匹配。以下是我得到的: import numpy as np

我已经尽了我最大的努力去寻找一个自己的解决方案,但我只是没有找到任何相关的东西。我有一些从.tbl文件中提取的numpy数组(这是一种天文表格式,我用atpy提取)。每个数组中大约有25000个数字,我用matplotlib将它们绘制为散点图。y轴值直接来自数组,x轴是两个单独数组中值的简单减法

这很好,但我真正需要做的是提取某个范围内的值(例如,我需要y的值在10到13之间,x的值在0到1之间)。当然,为了使绘图有效,这些值必须相互匹配。以下是我得到的:

import numpy as np
from numpy import ndarray
import matplotlib.pyplot as plt
import matplotlib
import atpy

twomass = atpy.Table()

twomass.read('/Raw_Data/IRSA_downloads/2MASS_GCbox1.tbl')

hmag = list([twomass['h_m']])

jmag = list([twomass['j_m']])

colorjh = list([j-h for j,h in zip(jmag, hmag)])

x = []

y = []

def list_maker():
for c,h in zip(colorjh, hmag):
    if np.all(c) < 1 == True and np.all(c) > 0 == True and np.all(h) < 13 == True and np.all(h) > 10 == True:
        x.append(c)
        y.append(h)       

list_maker()

plt.scatter(x, y, c='g', s=1, alpha=0.05)

plt.xlabel('Color(J-H)', fontsize=15)           #adjust axis labels here
plt.ylabel('Magnitude (H)', fontsize=15)

plt.gca().invert_yaxis()

plt.legend(loc=2)
plt.title('CMD for Galactic Center (2MASS)', fontsize=20)
plt.grid(True)

plt.show()
将numpy导入为np
来自numpy import Ndaray
将matplotlib.pyplot作为plt导入
导入matplotlib
导入atpy
twomass=atpy.Table()
twomass.read('/Raw_Data/IRSA_downloads/2MASS_GCbox1.tbl'))
hmag=列表([twomass['h_m']]
jmag=list([twomass['j_m']]
colorjh=list([j-h代表j,h在zip中(jmag,hmag)])
x=[]
y=[]
def list_maker():
对于拉链中的c、h(彩色JH、hmag):
如果np.all(c)<1==True且np.all(c)>0==True且np.all(h)<13==True且np.all(h)>10==True:
x、 附加(c)
y、 附加(h)
列表生成器()
plt.散射(x,y,c='g',s=1,alpha=0.05)
plt.xlabel('Color(J-H'),fontsize=15)#在此处调整轴标签
plt.ylabel(‘幅值(H)’,fontsize=15)
plt.gca().invert_yaxis()
plt.图例(loc=2)
plt.title('CMD代表银河系中心(2MASS)”,fontsize=20)
plt.grid(真)
plt.show()
我也尝试过这种方法对数据进行切片,但没有成功:

colorjh = colorjh[colorjh<1]

colorjh = colorjh[colorjh>0]
colorjh=colorjh[colorjh0]
我尝试了很多不同的事情,包括尝试将这些数组转换为列表,以及许多不同的事情,包括不等式的格式。在这个过程中,我可能已经远离了答案,但这段代码至少打印出了整个散布(它无法像我想要的那样分割数据)。其他一些迭代打印出的空白图与我要查找的数字范围相差甚远


我不熟悉python,也不熟悉这个网站,所以请尽可能明确地告诉我一些提示等。如果这是一个超级行话,我可能无法很好地利用你的建议。谢谢大家

试试下面的方法,我认为它与您的
for
s和
zip
s的效果相同,但速度应该快得多。如果有什么不合理的地方,请在评论中询问,我将编辑:

hmag = np.array(hmag)
jmag = np.array(jmah)

colorjh = jmag - hmag
idx_c = (colorjh > 0) & (colorjh < 1) # where condition on c is met
idx_h = (hmag > 10) & (hmag < 13) # where condition on h is met
idx = idx_c & idx_h # where both conditions are met

plt.scatter(colorjh[idx], hmag[idx], c='g', s=1, alpha=0.05)
hmag=np.array(hmag)
jmag=np.array(jmah)
colorjh=jmag-hmag
idx_c=(colorjh>0)和(colorjh<1)#其中满足c上的条件
idx_h=(hmag>10)和(hmag<13)#其中满足h的条件
idx=idx_c和idx_h,其中两个条件都满足
plt.散射(colorjh[idx],hmag[idx],c='g',s=1,alpha=0.05)

两种情况都可以同时执行:

hmag = np.array(hmag)
jmag = np.array(jmah)
colorjh = jmag - hmag

idx = ((colorjh > 0) & (colorjh < 1) & (hmag > 10) & (hmag < 13)).nonzero()[0]

plt.scatter(colorjh[idx], hmag[idx], c='g', s=1, alpha=0.05)
hmag=np.array(hmag)
jmag=np.array(jmah)
colorjh=jmag-hmag
idx=((colorjh>0)和(colorjh<1)和(hmag>10)和(hmag<13))。非零()
plt.散射(colorjh[idx],hmag[idx],c='g',s=1,alpha=0.05)
.nonzero()[0]
使它成为一个索引列表,而不是一个包含真值和假值的“掩码”,如果我们讨论的是很长的列表,这可能会更有效