Тест на неудобный массив для элементов одного JaggedArray в другом - PullRequest
0 голосов
/ 18 апреля 2020

Мне нужно выполнить вычисление для JaggedArray, но только если элементы в JaggedArray содержатся в другом JaggedArray. Я хотел бы получить обратно маску с True, если элемент является другим JaggedArray, или False в противном случае (ie. Должно быть 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()

Для awkward1 я получаю результат, но он кажется неправильным (или я не уверен, что это значит).

>>> 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, где обходной путь не работает?

Спасибо!

...