Это действительно имеет смысл, см. Типы каждого из массивов:
a1 = np.array([1,2,3],dtype='object') => 1D array of objects, size 3
a2 = np.array([["A"],["D"],["R"]],,dtype='object') => 2D array of objects, size 3x1
a3 = np.array([["A","F"],["D"],["R"]],dtype='object') => 1D array of lists of objects
a3
- это массив списков, так как np 2d (или более-d) массивы являются матрицами, вы не может иметь 1 строку с размером 1, а вторая с размером 3, большая часть вычислительной эффективности np обусловлена тем, как массивы организованы в памяти.
То есть numpy интерпретирует np.array([["A","F"],["D"],["R"]],dtype='object')
как массив списков (которые также являются объектами). Попытка сделать это с другим типом приведет к ошибке:
np.array([[1,2],[3],[4]],dtype=np.int64) -->
ValueError: setting an array element with a sequence.
Поэтому np.concatenate((a1,a2),axis=0)
завершится неудачно, поскольку a1 имеет форму (3,)
, а a2 имеет форму (3,1)
, в то время как a1 и a3 оба (3,)
.
Вы можете решить это следующим образом:
np.concatenate((a1,np.reshape(a2,a1.shape)))
np.concatenate((np.reshape(a1,a2.shape),a2))
Оба действительны, у каждого разные результаты, 1 решения не существует, так как объединение между a1
и a2
неоднозначно.