Вы можете создать одно большое выделение за кулисами и создать несколько меньших представлений:
backing = np.empty(10, np.int32)
my_data = [
backing[0:2],
backing[2:5],
backing[5:10]
]
my_data[0][...] = [1, 3]
my_data[1][...] = [1, 3, 5]
my_data[2][...] = [1, 3, 5, 7, 9]
print(my_data)
# [array([1, 3]), array([1, 3, 5]), array([1, 3, 5, 7, 9])]
Это имеет приятный бонус, что вы все равно можете работать с плоским массивом при необходимости:
backing += 1 # add to all sublists
print(my_data)
# [array([2, 4]), array([2, 4, 6]), array([ 2, 4, 6, 8, 10])]