Tea*_*hey 4 python numpy matplotlib astronomy multidimensional-array
我尽我所能找到自己的解决方案,但我只是没有提出任何相关的解决方案.我有一些从.tbl文件中提取的numpy数组(这是我用atpy提取的天文表格式).每个阵列中有大约25,000个数字,我将它们绘制为带有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()
Run Code Online (Sandbox Code Playgroud)
我也尝试过这种方法来切片数据,但没有运气:
colorjh = colorjh[colorjh<1]
colorjh = colorjh[colorjh>0]
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多不同的东西,包括尝试将这些数组转换为列表,以及许多不同的事物与不等式的格式.在这个过程中,我可能已经离开了答案,但这段代码至少打印出整个分散(它无法像我想的那样切断数据).其他一些迭代已打印出空白图,远不及我正在寻找的数字范围.
我是python和这个网站的新手,所以请尽可能明确地提出任何提示,等等.如果它是超级jargony我可能无法很好地利用你的建议.感谢大家.
尝试以下方法,我认为它与您的fors和zips 相同,但应该更快.如果某些事情没有意义,请在评论中提问我将编辑:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |