使用分块数组(Akwkard lib)进行索引或掩蔽

2024-05-15 01:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在加载一个带有uproot.lazyarrays()的根文件,它生成一个Table。 我计算这个表的一个函数,它返回一个长度等于表长度的JaggedArray。这是以ChunkedArray的形式出现的,我想用它作为一个掩码,应用在另一个JaggedArray上,这个ChunkedArray也是以ChunkedArray的形式出现的。 然而,这似乎不起作用。你知道吗

运行时:partial_prediction = array[variable][additional_selection_mask] 我得到以下错误:

~/.local/lib/python3.7/site-packages/awkward/array/chunked.py in __getitem__(self, where)
    334                 if isinstance(h, awkward.array.virtual.VirtualArray):
    335                     h = h.array
--> 336                 chunks.append(c[h, tail])
    337                 chunksizes.append(len(chunks[-1]))
    338             return self.copy(chunks=chunks, chunksizes=chunksizes)

~/.local/lib/python3.7/site-packages/awkward/array/jagged.py in __getitem__(self, where)
    768 
    769                 else:
--> 770                     raise TypeError("cannot interpret shape {0}, dtype {1} as a fancy index or mask".format(head.shape, head.dtype))
    771 
    772             if isinstance(node, self.numpy.ndarray) and len(node.shape) < sum(0 if isinstance(x, slice) else 1 for x in tail):

TypeError: cannot interpret shape (0,), dtype float64 as a fancy index or mask

为了说明数组的外观,下面是一个打印代码:

print("array[variable]")
print("type = ", type(array[variable]))
print("len = ", len(array[variable]))
print("array = ", array[variable])
print()
print("additional_selection_mask")
print("type = ", type(additional_selection_mask))
print("len = ", len(additional_selection_mask))
print("array = ", additional_selection_mask)

其输出如下

array[variable]
type =  <class 'awkward.array.chunked.ChunkedArray'>
len =  126071
array =  [[3.9413936 2.9023154 2.9157693 ... 1.8322366 1.8115876 1.7142034] [2.514293 49.567352 13.9077 ... 2.4213006 1.6156256 2.8986027] [1.220779 1.2491984 1.4126266 ... 2.3114712 1.7704046 1.347573] ... [0.32590318 1.2202137 1.7752564 ... 2.4342306 2.7896073 1.1572217] [0.2279669 0.21500091 0.21401915 ... 0.18808685 0.16509545 0.15571955] [2.000058 1.925363 1.8934264 ... 2.5060847 2.1708803 2.227355]]

additional_selection_mask
type =  <class 'awkward.array.chunked.ChunkedArray'>
len =  126071
array =  [False False False ... False False False]

在这种情况下,additional_selection_mask不是JaggedArray,但在一般情况下,它可以是array[variable]的相同形状。你知道吗


Tags: selffalselentypemaskarrayvariablechunks

热门问题