我需要对 JaggedArray 执行计算,但前提是 JaggedArray 中的元素包含在另一个 JaggedArray 中。True
如果元素是另一个 JaggedArray 或False
其他(即应该是np.array
) ,我想收到一个掩码。我一直在寻找一种在笨拙数组版本 0 或 1 中执行此操作的方法。但是,我无法找到直接的方法。in
似乎不起作用,我还没有找到等效的np.isin(...)
(在本期中提到,但似乎已经关闭而没有替换)。具体来说,我正在寻找:
import awkward as ak
import numpy as np
# Example arrays:
full_array = ak.fromiter([[1,2,3], [], [0,1,2,3,4,5]])
selected_array = ak.fromiter([[2], [], [7]])
# Desired output
desired_output = np.array([True, False, False])
对于尴尬0,我得到:
>>> selected_array in full_array
~/.venv/lib/python3.7/site-packages/awkward/array/base.py in __bool__(self)
138
139 def __bool__(self):
--> 140 raise ValueError("The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()")
141
142 __nonzero__ = __bool__
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我还尝试了其他一些变化,比如selected_array.pad(1).fillna(-10).flatten() in full_array
没有成功。我确实找到了一种解决方法,但它似乎相当间接:
workaround_array = full_array.ones_like() * selected_array.pad(1).fillna(-100).flatten()
assert (desired_output == (workaround_array == full_array).any()).all()
对于尴尬1,我得到了一个结果,但它似乎是错误的(或者我不确定这意味着什么)。
>>> import awkward1 as ak1
... ak1_full_array = ak1.from_awkward0(full_array)
... ak1_selected_array = ak1.from_awkward0(selected_array)
>>> ak1_selected_array in ak1_full_array
True
是否有更直接的方法来测试 JaggedArray 中的元素?我是否以某种方式滥用in
?对于每个 JaggedArray 条目有多个值的情况,解决方法不起作用怎么办?
谢谢!