首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中正确地将结果放在特定列表中的问题

在python中正确地将结果放在特定列表中的问题
EN

Stack Overflow用户
提问于 2021-03-23 16:01:55
回答 1查看 95关注 0票数 1

我目前正在试图运行一组图像(蒙面阵列/蒙面‘适合’文件)的m87通过一个等光拟合功能。在此,在脚本的前面已经执行了一个参考匹配,它提供了等光几何的功能,然后用来对星系的剩余图像进行采样。该职能如下:

代码语言:javascript
复制
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))

要详细访问结果,必须转换为可索引表:

代码语言:javascript
复制
isolist_results =[]
for isolist in isolist_sampled:
    isolist_tab = isolist.to_table()
    isolist_results.append(isolist_tab)

这个想法是,这段代码的最终产品是包含列表的列表,这些列表是各自图像的结果,而fit正在执行。基本上是这样的:

代码语言:javascript
复制
isolist_results = [[results from image0], [results from image1], ...]

我想要能够访问isolist_results,能够选择一个特定的结果,并在其中,前三列(对应于‘sma’-半长轴,‘强度’-等光强度,‘强度_err’-相应的错误)。这将使我可以简单地给函数提供完整的图像集,并在适当的访问之后,绘制和计算它们之间的不同比较。目前的结果如下:

代码语言:javascript
复制
[<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_)”命令向右移动一个缩进,将导致:

代码语言:javascript
复制
[<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值,我们现在在最终列表中的相同条目中都有适合的结果,对最终列表中的所有项都重复自己的结果。

注意:

  • map()命令用于将结果排序到最后的列表'isolist_sampled',然后在下一个循环中将其转换为可访问的表。
  • 这只是一小段完整笔记本的摘录。所以,是的,我加载了所有需要的软件包来解决这个问题。
  • 我绝不是蟒蛇专家,所以请温柔一点;)

问题:为了实现上面描述的最终列表(每个条目对应于各个输入图像的完整数组/结果列表),我需要在函数或之后更改什么?我认为这是一个微不足道的修正,但我似乎找不到。谢谢你在这件事上给我的帮助。

编辑:绘制了后者的“isolist_results”,看起来像。换句话说,现在'isolist_results‘中的两个条目都包含两个结果,但我希望条目1包含图像1的结果,条目2包含另一个结果。我希望这能澄清我的问题!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 16:19:34

下面的内容在我看来是不对的--您不应该在for循环中将"iso_“添加到isolist_temp中吗?

代码语言:javascript
复制
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 --不知道您在做什么--这闻起来很不对劲。

下面是更接近解决方案的形状,通常对循环更有意义。

代码语言:javascript
复制
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_fin
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66766849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档