我目前正在试图运行一组图像(蒙面阵列/蒙面‘适合’文件)的m87通过一个等光拟合功能。在此,在脚本的前面已经执行了一个参考匹配,它提供了等光几何的功能,然后用来对星系的剩余图像进行采样。该职能如下:
from photutils.isophote import EllipseSample, Isophote, IsophoteList
from photutils.isophote.isophote import Isophote, IsophoteList
test_set = [images_masked[0], images_masked[1]]
isolist_temp = []
def isophote_sampling(data_set):
for iso in uvw2_isolist_nclp3[1:]:
for data in test_set:
g = iso.sample.geometry
sample = EllipseSample(data, g.sma, geometry=g, sclip=3.0, nclip=3)
sample.update()
iso_ = Isophote(sample, 0, True, 0)
isolist_temp.append(iso_)
isolist_fin = IsophoteList(isolist_temp)
return isolist_fin
isolist_sampled = list(map(isophote_sampling,test_set))要详细访问结果,必须转换为可索引表:
isolist_results =[]
for isolist in isolist_sampled:
isolist_tab = isolist.to_table()
isolist_results.append(isolist_tab)这个想法是,这段代码的最终产品是包含列表的列表,这些列表是各自图像的结果,而fit正在执行。基本上是这样的:
isolist_results = [[results from image0], [results from image1], ...]我想要能够访问isolist_results,能够选择一个特定的结果,并在其中,前三列(对应于‘sma’-半长轴,‘强度’-等光强度,‘强度_err’-相应的错误)。这将使我可以简单地给函数提供完整的图像集,并在适当的访问之后,绘制和计算它们之间的不同比较。目前的结果如下:
[<QTable length=138>
sma intens ... niter stop_code
...
float64 float64 ... int64 int64
------------------ ---------------------- ... ----- ---------
0.5478081360044621 0.13135528023713275 ... 0 0
0.6025889496049083 0.1299246647753987 ... 0 0
0.6628478445653991 0.12836718613254233 ... 0 0
0.7291326290219391 0.12667273127860207 ... 0 0
0.802045891924133 0.12483448451703007 ... 0 0
0.8822504811165464 0.12284968122832181 ... 0 0
0.970475529228201 0.12069334888176463 ... 0 0
1.067523082151021 0.11792209677230417 ... 0 0
1.1742753903661232 0.11416709361894391 ... 0 0
... ... ... ... ...
sma intens ... niter stop_code
...
float64 float64 ... int64 int64
------------------ ---------------------- ... ----- ---------
0.5478081360044621 0.13135528023713275 ... 0 0
0.6025889496049083 0.1299246647753987 ... 0 0
0.6628478445653991 0.12836718613254233 ... 0 0
0.7291326290219391 0.12667273127860207 ... 0 0
0.802045891924133 0.12483448451703007 ... 0 0
0.8822504811165464 0.12284968122832181 ... 0 0
0.970475529228201 0.12069334888176463 ... 0 0
1.067523082151021 0.11792209677230417 ... 0 0
1.1742753903661232 0.11416709361894391 ... 0 0
... ... ... ... ...正如您所看到的,问题是函数只为输入的所有迭代输入结果之一。将“isolist_temp.append(Iso_)”命令向右移动一个缩进,将导致:
[<QTable length=276>
sma intens ... niter stop_code
...
float64 float64 ... int64 int64
------------------ ---------------------- ... ----- ---------
0.5478081360044621 0.21974529309537935 ... 0 0
0.5478081360044621 0.13135528023713275 ... 0 0
0.6025889496049083 0.21833267680395468 ... 0 0
0.6025889496049083 0.1299246647753987 ... 0 0
0.6628478445653991 0.21679269241579674 ... 0 0
0.6628478445653991 0.12836718613254233 ... 0 0
0.7291326290219391 0.21511467290298006 ... 0 0
0.7291326290219391 0.12667273127860207 ... 0 0
0.802045891924133 0.21329102749191028 ... 0 0
... ... ... ... ...
sma intens ... niter stop_code
...
float64 float64 ... int64 int64
------------------ ---------------------- ... ----- ---------
0.5478081360044621 0.21974529309537935 ... 0 0
0.5478081360044621 0.13135528023713275 ... 0 0
0.6025889496049083 0.21833267680395468 ... 0 0
0.6025889496049083 0.1299246647753987 ... 0 0
0.6628478445653991 0.21679269241579674 ... 0 0
0.6628478445653991 0.12836718613254233 ... 0 0
0.7291326290219391 0.21511467290298006 ... 0 0
0.7291326290219391 0.12667273127860207 ... 0 0
0.802045891924133 0.21329102749191028 ... 0 0
... ... ... ... ...正如您所看到的,现在两个结果都被放入最终列表中,但是对于每个sma值,我们现在在最终列表中的相同条目中都有适合的结果,对最终列表中的所有项都重复自己的结果。
注意:
问题:为了实现上面描述的最终列表(每个条目对应于各个输入图像的完整数组/结果列表),我需要在函数或之后更改什么?我认为这是一个微不足道的修正,但我似乎找不到。谢谢你在这件事上给我的帮助。
编辑:绘制了后者的“isolist_results”,看起来像这。换句话说,现在'isolist_results‘中的两个条目都包含两个结果,但我希望条目1包含图像1的结果,条目2包含另一个结果。我希望这能澄清我的问题!
发布于 2021-03-23 16:19:34
下面的内容在我看来是不对的--您不应该在for循环中将"iso_“添加到isolist_temp中吗?
for data in test_set:
g = iso.sample.geometry
sample = EllipseSample(data, g.sma, geometry=g, sclip=3.0, nclip=3)
sample.update()
iso_ = Isophote(sample, 0, True, 0)
isolist_temp.append(iso_)
isolist_fin = IsophoteList(isolist_temp)我还会担心,在进入for数据循环之前,您不会重置isolist_temp --不知道您在做什么--这闻起来很不对劲。
下面是更接近解决方案的形状,通常对循环更有意义。
for iso in uvw2_isolist_nclp3[1:]:
isolist_temp = []
for data in test_set:
g = iso.sample.geometry
sample = EllipseSample(data, g.sma, geometry=g, sclip=3.0, nclip=3)
sample.update()
iso_ = Isophote(sample, 0, True, 0)
isolist_temp.append(iso_)
isolist_fin = IsophoteList(isolist_temp)
return isolist_finhttps://stackoverflow.com/questions/66766849
复制相似问题