Python:将numpy数组保存到ROOT文件

时间:2016-03-08 03:43:33

标签: python arrays numpy root-framework

所以我的研究伙伴和我正在尝试将一个非常大的(47104,5)数组保存到ROOT文件中的TTree中。 Python端的数组运行正常。我们可以访问所有内容并运行正常的命令,但是当我们运行root_numpy.array2root()命令时,我们会得到一个奇怪的错误。

  

'NoneType'类型的对象没有len()

我们为此部分运行的代码如下:

import root_numpy as rnp
import numpy as np
import scipy
import logging

def save_array(outputArray, outputName):
    outputString =str(outputName)
    logging.info("Creating .Root file")
    rnp.array2root(outputArray,outputString,treename="Training_Variables",mode="recreate")

我们放置了outputString变量,以确保我们将文件名作为字符串放入。 (在我们的python终端中,我们在outputName的末尾添加.root以将其保存为.root文件。)。

这是终端的图片。 Showing exact error location in root_numpy

差不多,我们很困惑为什么array2root()调用一个对象的len(),我们认为它不应该有一个len?它应该只是一个形状。任何见解将不胜感激。

1 个答案:

答案 0 :(得分:1)

从NumPy数组到ROOT数据类型的转换例程使用结构化数组。请参阅以下两个链接。 (未经过测试,但由于例程使用arr.dtypes.namesarr.dtypes.fields属性),这很可能是问题。

http://rootpy.github.io/root_numpy/reference/generated/root_numpy.array2tree.html#root_numpy.array2tree

http://rootpy.github.io/root_numpy/reference/generated/root_numpy.array2root.html#root_numpy.array2root