У меня есть 2d ndarray of ndarrays, который выглядит следующим образом:
array([[array([0]), array([0, 1]), array([0, 1]), None, None,array([0, 1])],
[array([0, 1]), None, array([0, 1]), array([0, 1]), array([0, 1]),None],
[None, None, array([0, 1]), None, None, None],
[array([0, 1]), array([0, 1]), None, array([0, 1]), array([0, 1]),array([0, 1])],
[array([0, 1]), None, None, None, array([0, 1]), None],
[array([0, 1]), None, array([0, 1]), array([0, 1]), array([0, 1]),None]], dtype=object)
Моя цель состоит в том, чтобы получить индексы элементов, отсортированные по len(element)
, также пропускает те элементы, которые None
. Как:
array([[0,0], --> len= 1
[0,1], --> len=2
[0,2], --> len=2
[0,5], ...
[1,0],
[1,2],
[1,3],
[1,4],
... ])
Я попытался сначала преобразовать элементы в их len
, что даст нам что-то вроде:
array([[1, 2, 2, 0, 0, 2],
[2, 0, 2, 2, 2, 0],
[0, 0, 2, 0, 0, 0],
[2, 2, 0, 2, 2, 2],
[2, 0, 0, 0, 2, 0],
[2, 0, 2, 2, 2, 0]], dtype=object)
Однако я не смог найти эффективный способ создания списка индексов (или ndarray будет делать).
Пожалуйста, помогите мне с этим. Я ценю любого, кто мог бы решить эту проблему или дать мне некоторую подсказку.
Редактировать: Я нашел близкое, но не идеальное решение: из-за ограничений данных элементы "lenArray" могут иметь только 3 вида значения: 1, 2, инф. Поэтому я могу воспользоваться этим, чтобы сделать:
ones = np.column_stack(np.where(lenArray==1))
twos = np.column_stack(np.where(lenArray==2))
infs = np.column_stack(np.where(lenArray==inf))
sort_lenidx = np.concatenate((ones,twos,infs))
Где sort_lenidx будет соответствовать моим потребностям. Однако это не очень общий (если возможные значения nums будут очень большими, это будет бесполезно) и элегантный способ решения моей проблемы. Я все еще надеюсь, что кто-то может дать мне лучший способ сделать это. Буду признателен за вашу помощь в любой форме.