Стефан ван дер Вальт (разработчик): объясняет :
Конструктор ndarray делает все возможное
угадать, какие вы данные
кормить его, но иногда это нужно
немного помощи ....
Я предпочитаю строить массивы
явно, так что нет сомнений, что
происходит под капотом:
Когда вы говорите что-то вроде
instance1=np.array([(67111L,1.0),(104242L,1.0)],dtype=np.dtype([('f0', '<u4'), ('f1', '<f4')]))
instance2=np.array([(67112L,2.0),(104243L,2.0)],dtype=np.dtype([('f0', '<u4'), ('f1', '<f4')]))
instances=[instance1,instance2]
Y=np.array(instances, dtype = np.object)
np.array
вынужден угадать, какой размер массива вы хотите.
instances
- это список из двух объектов, каждый из которых имеет длину 2. Поэтому, вполне разумно, np.array
предполагает, что Y
должен иметь форму (2,2):
print(Y.shape)
# (2, 2)
В большинстве случаев я думаю, что это то, что было бы желательно. Тем не мение,
в вашем случае, поскольку это не то, что вам нужно, вы должны явно создать массив:
X=np.empty((len(instances),), dtype = np.object)
print(X.shape)
# (2,)
Теперь нет вопроса о форме X: (2, )
и так, когда вы вводите данные
X[:] = instances
numpy достаточно умен, чтобы рассматривать instances
как последовательность двух объектов.