Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “根除”中的字符串数组_Python_Uproot - Fatal编程技术网

Python “根除”中的字符串数组

Python “根除”中的字符串数组,python,uproot,Python,Uproot,我有一棵树,它有一根树枝,用来存储字符串。 当我使用uproot.open()和arrays()方法阅读时,我得到以下结果: >>> array_train['backtracked_end_process'] <ObjectArray [b'FastScintillation' b'FastScintillation' b'FastScintillation' ... b'FastScintillation' b'FastScintillation' b'FastSci

我有一棵树,它有一根树枝,用来存储字符串。 当我使用
uproot.open()
arrays()方法阅读时,我得到以下结果:

>>> array_train['backtracked_end_process']
<ObjectArray [b'FastScintillation' b'FastScintillation' b'FastScintillation' ... b'FastScintillation' b'FastScintillation' b'FastScintillation'] at 0x7f48936e6c90>

有人对如何进行有什么建议吗?能够将它转换为一个
numpy.chararray
就已经解决了这个问题,但我不知道如何做到这一点。

字符串处理是《根除》中的一个弱点。它使用一个定制的
ObjectArray
(甚至不是笨拙数组中的
StringArray
),它会根据需要生成
字节
对象。您想要的是一个字符串数组类,它的
==
重载意味着“比较每个可变长度的字符串,必要时将单个字符串广播到一个数组中。”不幸的是,字符串的根除
ObjectArray
和笨拙数组中的
StringArray
类都没有做到这一点

所以这里是如何做到这一点的,无可否认,这是通过隐式Pythonfor循环实现的

>导入根除,numpy
>>>f=拔出。打开(“http://scikit-hep.org/uproot/examples/sample-6.10.05-zlib.root")
>>>t=f[“样本”]
>>>t[“str”].array()
>>>数组(列表(t[“str”].array())
数组([b'hey-0',b'hey-1',b'hey-2',b'hey-3',b'hey-4',b'hey-5',
b'hey-6',b'hey-7',b'hey-8',b'hey-9',b'hey-10',b'hey-11',
b'hey-12',b'hey-13',b'hey-14',b'hey-15',b'hey-16',b'hey-17',
b'hey-18',b'hey-19',b'hey-20',b'hey-21',b'hey-22',b'hey-23',
b'hey-24',b'hey-25',b'hey-26',b'hey-27',b'hey-28',b'hey-29'],
数据类型=“| S6”)
>>>numpy.array(list(t[“str”].array())==b“hey-0”
数组([真,假,假,假,假,假,假,假,假,
假,假,假,假,假,假,假,假,假,假,
假,假,假,假,假,假,假,假,假,假,
假,假,假])
循环隐含在
列表
构造函数中,该构造函数迭代
对象数组
,将每个元素转换为
字节
字符串。这个Python列表不适合一次一个数组的操作,因此我们随后构造一个NumPy数组,这是(以填充为代价的)

备选方案,可能更好:

在写这篇文章的时候,我记得Uplot的
ObjectArray
是用一个笨拙的
JaggedArray
实现的,所以上面的转换可以用
JaggedArray
常规方法来执行,这可能要快得多(没有中间Python
字节
对象,没有Python for循环)

>t[“str”].array().regular()
数组([b'hey-0',b'hey-1',b'hey-2',b'hey-3',b'hey-4',b'hey-5',
b'hey-6',b'hey-7',b'hey-8',b'hey-9',b'hey-10',b'hey-11',
b'hey-12',b'hey-13',b'hey-14',b'hey-15',b'hey-16',b'hey-17',
b'hey-18',b'hey-19',b'hey-20',b'hey-21',b'hey-22',b'hey-23',
b'hey-24',b'hey-25',b'hey-26',b'hey-27',b'hey-28',b'hey-29'],
数据类型=对象)
>>>t[“str”].array().regular()==b“hey-0”
数组([真,假,假,假,假,假,假,假,假,
假,假,假,假,假,假,假,假,假,假,
假,假,假,假,假,假,假,假,假,假,
假,假,假])

(上面描述的功能不是有意创建的,但它可以工作,因为正确的片段以一种偶然的方式组成。)

字符串处理是“根除”中的一个弱点。它使用一个定制的
ObjectArray
(甚至不是笨拙数组中的
StringArray
),它会根据需要生成
字节
对象。您想要的是一个字符串数组类,它的
==
重载意味着“比较每个可变长度的字符串,必要时将单个字符串广播到一个数组中。”不幸的是,字符串的根除
ObjectArray
和笨拙数组中的
StringArray
类都没有做到这一点

所以这里是如何做到这一点的,无可否认,这是通过隐式Pythonfor循环实现的

>导入根除,numpy
>>>f=拔出。打开(“http://scikit-hep.org/uproot/examples/sample-6.10.05-zlib.root")
>>>t=f[“样本”]
>>>t[“str”].array()
>>>数组(列表(t[“str”].array())
数组([b'hey-0',b'hey-1',b'hey-2',b'hey-3',b'hey-4',b'hey-5',
b'hey-6',b'hey-7',b'hey-8',b'hey-9',b'hey-10',b'hey-11',
b'hey-12',b'hey-13',b'hey-14',b'hey-15',b'hey-16',b'hey-17',
b'hey-18',b'hey-19',b'hey-20',b'hey-21',b'hey-22',b'hey-23',
b'hey-24',b'hey-25',b'hey-26',b'hey-27',b'hey-28',b'hey-29'],
数据类型=“| S6”)
>>>numpy.array(list(t[“str”].array())==b“hey-0”
数组([真,假,假,假,假,假,假,假,假,
假,假,假,假,假,假,假,假,假,假,
假,假,假,假,假,假,假,假,假,假,
假,假,假])
循环隐含在
列表
构造函数中,该构造函数迭代
对象数组
,将每个元素转换为
字节
字符串。这个Python列表不适合一次一个数组的操作,因此我们随后构造一个NumPy数组,这是(以填充为代价的)

备选方案,可能更好:

在写这篇文章的时候,我记得Uplot的
ObjectArray
是用一个笨拙的
JaggedArray
实现的,所以上面的转换可以用
JaggedArray
常规方法来执行,这可能要快得多(没有中间Python
字节
对象,没有Python for循环)

>t[“str”].array().regular()
数组([b'hey-0',b'hey-1',b'hey-2',b'hey-3',b'hey-4',b'hey-5',
b'hey-6',b'hey-7',b'hey-8',b'hey-9',b'hey-10',b'hey-11',
b'hey-12',b'hey-13',b'hey-14',b'hey-15',b'hey-16',b'hey-17',
b'hey-18',b'hey-19',b'hey-20',b'hey-21',b'hey-22',b'hey-23',
b'hey-24',b'hey-25',b'hey-26',b'hey-27',b'hey-28',b'hey-29'],
数据类型=对象)
>>>t[“str”].a
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-97-a28f3706c5b5> in <module>
----> 1 array_train['backtracked_end_process'] == b'FastScintillation'

~/.local/lib/python3.7/site-packages/numpy/lib/mixins.py in func(self, other)
     23         if _disables_array_ufunc(other):
     24             return NotImplemented
---> 25         return ufunc(self, other)
     26     func.__name__ = '__{}__'.format(name)
     27     return func

~/.local/lib/python3.7/site-packages/awkward/array/objects.py in __array_ufunc__(self, ufunc, method, *inputs, **kwargs)
    216                 contents.append(x)
    217 
--> 218         result = getattr(ufunc, method)(*contents, **kwargs)
    219 
    220         if self._util_iscomparison(ufunc):

~/.local/lib/python3.7/site-packages/awkward/array/jagged.py in __array_ufunc__(self, ufunc, method, *inputs, **kwargs)
    987                 data = self._util_toarray(inputs[i], inputs[i].dtype)
    988                 if starts.shape != data.shape:
--> 989                     raise ValueError("cannot broadcast JaggedArray of shape {0} with array of shape {1}".format(starts.shape, data.shape))
    990 
    991                 if parents is None:

ValueError: cannot broadcast JaggedArray of shape (24035,) with array of shape ()