首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个不同的节点获取两个输出,并将它们作为一个列表提供给另一个节点作为一个输入

从两个不同的节点获取两个输出,并将它们作为一个列表提供给另一个节点作为一个输入
EN

Stack Overflow用户
提问于 2020-02-25 00:57:39
回答 1查看 84关注 0票数 1

是巴勃罗!

我在试着为DTI写一个脚本。我已经有了函数和nipype,但现在我正在尝试使用节点,但有一个节点需要两个输入的列表-Merge()-来合并两个图像。但是,它只接受一个输入,并且connect()不允许一次输入多个输入。在这个函数中,它既不让我单独做这件事,也不让我尝试util.merge会产生一个错误。

我想知道我是否可以从两个不同节点的输出中获取两个输入,并将它们与另一个节点连接到一个列表中,然后将其提供给将该列表作为输入的节点。或者,也许还有另一种方法来定义允许这样做的节点?

有人知道些什么吗?

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-06 00:29:20

如果我理解得很好,您只想将两个项目合并到一个列表中。

这就是merge接口的用途。您只需在初始化时提供输入的数量,如the doc中所述。如果输入是列表,则no_flattenravel_input选项将帮助您,这是经常发生的情况。

编辑:一个小示例:

代码语言:javascript
复制
from nipype import Node, Workflow
from nipype.interfaces.utility import Function, Merge

#create a workflow
example_wf = Workflow('merging_example')

#this function just injects stuff in the pipeline
def func_stuffSource(stuff):
    return stuff

sourceA=Node(Function(input_names=["stuff"], 
                      output_names=["returnedStuff"], 
                      function=func_stuffSource), 
             name='sourceA_node')
sourceB=Node(Function(input_names=["stuff"], 
                      output_names=["returnedStuff"], 
                      function=func_stuffSource), 
             name='sourceB_node')

merger = Node(Merge(2), name='merger_node')

#we just give stuff to inject to the two nodes
sourceA.inputs.stuff=['a0', 'a1', 'a2']
sourceB.inputs.stuff=['b0', 'b1', 'b2', 'b3']

example_wf.connect([
    ( sourceA, merger, [('returnedStuff' , 'in1')]), 
    ( sourceB, merger, [('returnedStuff' , 'in2')])
])

#simple function to print whatever the node gets
def printStuff(stuff):
    from nipype import logging
    logger = logging.getLogger("nipype.interface")
    logger.info(str(stuff))

printer = Node(Function(input_names=['stuff'], 
                        output_names=[], 
                        function=printStuff), 
               name='print_node')

example_wf.connect([ 
    (merger, printer, [('out', 'stuff')]) 
])


example_wf.run()

结果:

代码语言:javascript
复制
200306-08:32:22,463 nipype.workflow INFO:
         Workflow merging_example settings: ['check', 'execution', 'logging', 'monitoring']
200306-08:32:22,475 nipype.workflow INFO:
         Running serially.
200306-08:32:22,476 nipype.workflow INFO:
         [Node] Setting-up "merging_example.sourceB_node" in "/tmp/tmpzfklhqwq/merging_example/sourceB_node".
200306-08:32:22,484 nipype.workflow INFO:
         [Node] Running "sourceB_node" ("nipype.interfaces.utility.wrappers.Function")
200306-08:32:22,491 nipype.workflow INFO:
         [Node] Finished "merging_example.sourceB_node".
200306-08:32:22,491 nipype.workflow INFO:
         [Node] Setting-up "merging_example.sourceA_node" in "/tmp/tmppssiddpk/merging_example/sourceA_node".
200306-08:32:22,496 nipype.workflow INFO:
         [Node] Running "sourceA_node" ("nipype.interfaces.utility.wrappers.Function")
200306-08:32:22,501 nipype.workflow INFO:
         [Node] Finished "merging_example.sourceA_node".
200306-08:32:22,502 nipype.workflow INFO:
         [Node] Setting-up "merging_example.merger_node" in "/tmp/tmp_h6t6h7o/merging_example/merger_node".
200306-08:32:22,505 nipype.workflow INFO:
         [Node] Running "merger_node" ("nipype.interfaces.utility.base.Merge")
200306-08:32:22,511 nipype.workflow INFO:
         [Node] Finished "merging_example.merger_node".
200306-08:32:22,511 nipype.workflow INFO:
         [Node] Setting-up "merging_example.print_node" in "/tmp/tmpg4zggeq6/merging_example/print_node".
200306-08:32:22,517 nipype.workflow INFO:
         [Node] Running "print_node" ("nipype.interfaces.utility.wrappers.Function")
200306-08:32:22,518 nipype.interface INFO:
         ['a0', 'a1', 'a2', 'b0', 'b1', 'b2', 'b3']
200306-08:32:22,522 nipype.workflow INFO:
         [Node] Finished "merging_example.print_node".

请注意,我们的列表已正确合并。要自己检查,可以创建到其他打印机节点,并将它们连接到sourceA和sourceB的输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60380633

复制
相关文章

相似问题

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