Массив объектов должен быть заполнен отдельными set()
объектами.Это означает создание их по отдельности, как я делаю с пониманием списка:
In [279]: arr = np.array([set() for _ in range(4)]).reshape(2,2)
In [280]: arr
Out[280]:
array([[set(), set()],
[set(), set()]], dtype=object)
Эта конструкция должна подчеркивать тот факт, что этот массив тесно связан со списком или списком списков.
Теперь мы можем выполнить операцию набора над одним из этих элементов:
In [281]: arr[0,1].add(124) # more idiomatic than arr[0][1]
In [282]: arr
Out[282]:
array([[set(), {124}],
[set(), set()]], dtype=object)
Обратите внимание, что мы не можем оперировать более чем одним набором одновременно.Массив объектов предлагает несколько преимуществ по сравнению со списком.
Это двумерный массив;наборы не образуют измерение.Сравните это с
In [283]: image = (((1,2,3), (1,0,0)), ((1,1,1), (2,1,2)))
...: image_array = np.array(image)
...:
In [284]: image_array
Out[284]:
array([[[1, 2, 3],
[1, 0, 0]],
[[1, 1, 1],
[2, 1, 2]]])
Хотя он начинался с кортежей, он создал трехмерный массив целых чисел.