Я могу начать с двухэлементного массива dtype объекта:
In [351]: M = np.array((None,None))
In [352]: M.shape
Out[352]: (2,)
In [353]: M
Out[353]: array([None, None], dtype=object)
In [354]: M[0]=(5,)
In [355]: M[1]=()
In [356]: M
Out[356]: array([(5,), ()], dtype=object)
In [357]: print(M)
[(5,) ()]
Или более напрямую (из списка кортежей) (будьте осторожны, иногда это приводит к ошибке, а не к массиву объектов).
In [362]: np.array([(55,),()])
Out[362]: array([(55,), ()], dtype=object)
Но я не понимаю, для чего это хорошо. Было бы проще составить список кортежей:
In [359]: [(5,), ()]
Out[359]: [(5,), ()]
Не пытайтесь использовать np.append
как добавление в список. Это просто неуклюжий интерфейс к np.concatenate
.
M
как вы его создали:
In [360]: M = np.array(((),()))
In [361]: M
Out[361]: array([], shape=(2, 0), dtype=float64)
Не может содержать никаких элементов. И вы не можете изменить форму слотов, как вы можете с помощью списка. В numpy
shape
и dtype
значимы.
Вы можете указать object
dtype:
In [367]: M = np.array([(),()], object)
In [368]: M
Out[368]: array([], shape=(2, 0), dtype=object)
но все еще невозможно ссылаться и изменять один из этих 0 элементов.