来自根目录的字符串数组

尼科洛·福皮亚尼(NicolòFoppiani)

我有一棵树,一个分支存储一个字符串。当我阅读使用uproot.open()和方法时,arrays()我得到以下信息:

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

我想通过执行类似的操作来使用此分支来创建蒙版,array_train['backtracked_end_process'] != b'FastScintillation'但不幸的是,这会产生错误:

---------------------------------------------------------------------------
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 ()

有人对如何进行有任何建议吗?能够将其转换为anumpy.chararray已经可以解决问题,但是我不知道该怎么做。

吉姆·皮瓦尔斯基

字符串处理是连根拔起的弱点。它使用一个自定义ObjectArray(甚至不在StringArray尴尬的数组中),该自定义可bytes按需生成对象。您想要的是一个字符串数组类,其中的==重载表示“比较每个可变长度的字符串,如有必要,将单个字符串广播到数组中”。不幸的是,ObjectArray字符串的连根拔起StringArray笨拙的数组中类都还没有这样做。

因此,这里是您可以通过隐式的Python for循环来实现的方法。

>>> import uproot, numpy
>>> f = uproot.open("http://scikit-hep.org/uproot/examples/sample-6.10.05-zlib.root")
>>> t = f["sample"]

>>> t["str"].array()
<ObjectArray [b'hey-0' b'hey-1' b'hey-2' ... b'hey-27' b'hey-28' b'hey-29'] at 0x7fe835b54588>

>>> numpy.array(list(t["str"].array()))
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'],
      dtype='|S6')

>>> numpy.array(list(t["str"].array())) == b"hey-0"
array([ True, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False])

该循环在list迭代构造函数中是隐式ObjectArray,将每个元素转换为bytes字符串。此Python列表不适用于一次数组操作,因此我们构造了一个NumPy数组,这是(以填充为代价)。

替代方案,可能更好:

在撰写本文时,我记得uprootObjectArray是使用笨拙实现的JaggedArray,因此可以使用JaggedArrayregular方法执行上述转换,该方法可能快得多(没有中间的Pythonbytes对象,没有Python for循环)。

>>> t["str"].array().regular()
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'],
      dtype=object)

>>> t["str"].array().regular() == b"hey-0"
array([ True, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False])

(上面描述的功能不是故意创建的,但之所以起作用,是因为正确的部分是通过偶然的方式组成的。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将查询字符串重定向到根目录

来自字符串的 JSON 数组

来自字符串的数组键值对

将index.php重定向到根目录(查询字符串除外)

重写 Apache 根目录中用户名的 URL 字符串

具有来自对象数组的字符串属性的 NSSet

来自字符串数组的 LINQ Where 子句

来自Perl数组的字符串的长度始终返回1

来自字符串数组的Angular 2 Kendo Grid

基于来自后端的数组生成字符串 - Javascript

来自 dict iterable 的字符串数组:使用什么 dtype?

jQuery来自字符串的对象的自动完成数组

如何显示来自 JSON 字符串转换数组的数据

来自数组 React 的过滤字符串之间的空格

如何组合来自 2 个 numpy 数组的字符串

检查richtextbox是否包含来自vb中字符串数组的字符串

如果字符串包含来自 js 数组中的字母,则替换字符串

在目录列表数组中查找字符串

PHP将目录的多维数组转换为字符串

来自字符串的URLEncoding

来自字符串的setImageResource

.htaccess重定向,该查询没有根目录的查询字符串和第一级

字符串数组?

字符串数组的数组

从目录路径中以字符串形式获取对象数组中的目录路径

来自双精度数组的数组到字符串转换错误

包含来自另一个数组的任何子字符串的数组?

在 Python 中,当我遍历文件目录时,如何在根目录输入文本文件并将与 re 匹配的字符串替换为 xxxxx

Groovy - 来自字符串的子字符串