我有一个由9列和500万行组成的数组,用于一些有关恒星的实验数据。
列的索引号为:
0质量 1岁 2时间步长 3金属性 4有效温度 5光度 6原木表面重力 7半径 8最外层对流层。
我只想针对某些质量范围内的恒星绘制Python光度与温度的关系图。
我不想使用遍历数组的方法,而是想使用隐式数组索引,因为它被告知会更快?
我可以绘制整个质量范围,方法是拉动整个列的亮度,绘制整个列的温度,这很好,但是现在我想针对不同的质量范围分别绘制图,这就是我要坚持的地方
如果还有另一种适用于大文件的解决方案,那就太好了。不管如何解决问题,我只想学习如何从数据数组中选择关键数据位。
谢谢
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
path="C://///.filename.txt"
mesa_data=np.loadtxt(path)
print(mesa_data.shape)
print(mesa_data)
luminosity = mesa_data[:,5]
teff = mesa_data[:,4]
plt.plot(teff,luminosity,'go')
plt.xlim(10000, 0) # decreasing Temperature
plt.yscale('log')
plt.xlabel('Temperature (K)')
plt.ylabel('Luminosity (Solar Units)')
plt.title('HR Diagram for MESA model')
plt.show()
答案 0 :(得分:0)
我找到了一种解决方案。
我创建了一个布尔数组,然后用它索引从数据中提取的切片数组。
它并没有真正做到我想要的。我可以使用下面的代码创建一个布尔数组,但是如果按列设置等于be中的范围,则会出现错误
m_half = mesa_data[:,0] < 0.501 and > 0.499
我收到错误消息。
“具有多个元素的数组的真值不明确。请使用a.any()或a.all()”
我将研究建议的解决方案,但是有没有更好的方法。我觉得我已经使复杂的事情变得简单了吗?
我想查询我的数据表以获取所有类型的组合,但是目前,我只知道如何对小于某个参数或当然大于该参数的值进行处理。
谢谢
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
path="data.txt"
mesa_data=np.loadtxt(path)
print(mesa_data.shape)
print(mesa_data)
luminosity = mesa_data[:,5] #Use implicit array indexing to slice the Luminosity values
teff = mesa_data[:,4] #Use implicit array indexing to slice the Temperature values
m_half = mesa_data[:,0] < 0.501 #Create a Boolean Array for those Masses in a certain range
l_half = luminosity[m_half] #Use Boolean to create a new data range of luminosities for those stars in mass range
teff_half = teff[m_half] #Use Boolean to create a new data range of temperatures for those stars in mass range
plt.subplot (2,1,1)
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
plt.plot(teff,luminosity,'go')
plt.xlim(10000, 0) # decreasing Temperature
plt.yscale('log')
plt.xlabel('Temperature (K)')
plt.ylabel('Luminosity (Solar Units)')
plt.title('HR Diagram for MESA model over all Masses')
plt.subplot (2,1,2)
plt.plot(teff_half,l_half,'go')
plt.xlim(4500, 3000) # decreasing Temperature
plt.yscale('log')
plt.xlabel('Temperature (K)')
plt.ylabel('Luminosity (Solar Units)')
plt.title('HR Diagram for MESA model for 0.5 Solar Mass units')
plt.savefig ("HR_All.png", bbox_inches='tight')
plt.show()