Массив со смесью чисел и списков (пустой или нет) равен object dtype
Это практически list
;Быстро скомпилированный numpy
математика больше не работает.Единственная практическая альтернатива пониманию списка - np.frompyfunc
.
. Напишите небольшую функцию, которая может различать число и список и длину списка, и примените ее к массиву.Если он возвращает True для пустого списка, то np.where
будет определять местоположение
In [41]: myList1 = np.array([1,1,1,[1],1,1,[1],1,1])
...: myList2 = np.array([1,1,1,[],1,1,[],1,1])
Разработать функцию, которая возвращает True для пустого списка, иначе False:
In [42]: len(1)
...
TypeError: object of type 'int' has no len()
In [43]: len([])
Out[43]: 0
In [44]: def foo(item):
...: try:
...: return len(item)==0
...: except TypeError:
...: pass
...: return False
...:
In [45]: foo([])
Out[45]: True
In [46]: foo([1])
Out[46]: False
In [47]: foo(1)
Out[47]: False
Применитьэто к массивам:
In [48]: f=np.frompyfunc(foo,1,1)
In [49]: f(myList1)
Out[49]:
array([False, False, False, False, False, False, False, False, False],
dtype=object)
In [50]: np.where(f(myList1))
Out[50]: (array([], dtype=int64),)
In [51]: np.where(f(myList2))
Out[51]: (array([3, 6]),)