В numpy нет встроенной поддержки для правильных зубчатых массивов. Лучшая ставка для вашего приложения - это, вероятно, массив маски :
import itertools
import numpy.ma as ma
array = None
list_b = []
def indicator_function(arr):
return -1
for i in itertools.count():
list_a = []
list_b.append(list_a)
list_a.append(i)
list_a.append(33)
list_a.append(44)
list_a.append(np.nan)
array = ma.MaskedArray(list_b)
# assign mask or indicator_function, as appropriate
ix = 10 + 1
array[:ix, -1] = ma.masked
array[ix:, -1] = indicator_function(array[:,0])
if i == 15:
break
В результате получается array
в маске, который выглядит следующим образом:
[[0.0, 33.0, 44.0, --],
[1.0, 33.0, 44.0, --],
[2.0, 33.0, 44.0, --],
[3.0, 33.0, 44.0, --],
[4.0, 33.0, 44.0, --],
[5.0, 33.0, 44.0, --],
[6.0, 33.0, 44.0, --],
[7.0, 33.0, 44.0, --],
[8.0, 33.0, 44.0, --],
[9.0, 33.0, 44.0, --],
[10.0, 33.0, 44.0, --],
[11.0, 33.0, 44.0, -1.0],
[12.0, 33.0, 44.0, -1.0],
[13.0, 33.0, 44.0, -1.0],
[14.0, 33.0, 44.0, -1.0],
[15.0, 33.0, 44.0, -1.0]]