Вы можете объединять массивы только с одинаковым количеством измерений (это можно разрешить с помощью широковещательной передачи) и с таким же количеством элементов, за исключением оси объединения.
Таким образом, вам нужно добавить / объединить пустой массивправильной формы и заполните ее значениями arr2
.
# concatenate an array of the correct shape filled with np.nan
arr1_arr2 = np.concatenate((arr1, np.full((1, arr1.shape[1]), np.nan)))
# fill concatenated row with values from arr2
arr1_arr2[-1, :3] = arr2
Но в целом это всегда хороший совет, НЕ добавлять / объединять и т. д. массивы.Если это возможно, попробуйте заранее угадать правильную форму конечного массива и создайте пустой массив (или заполненный np.nan) конечной формы, который будет заполнен в процессе.Например:
arr1_arr2 = np.full((3, 5), np.nan)
arr1_arr2[:-1, :] = arr1
arr1_arr2[-1, :arr2.shape[0]] = arr2
Если это только одна операция добавления / объединения и она не критична для производительности, то можно объединить / добавить, в противном случае предпочтительнее полное предварительное распределение.
Если многие массивы должны быть объединены, и все массивы для объединения имеют одинаковую форму, это будет наилучший способ сделать это:
arr1 = np.array([[9, 4, 2, 6, 7],
[8, 5, 4, 1, 3]])
# some arrays to concatenate:
arr2 = np.array([3, 1, 5])
arr3 = np.array([5, 7, 9])
arr4 = np.array([54, 1, 99])
# make array of all arrays to concatenate:
arrs_to_concat = np.vstack((arr2, arr3, arr4))
# preallocate result array filled with nan
arr1_arr2 = np.full((arr1.shape[0] + arrs_to_concat.shape[0], 5), np.nan)
# fill with values:
arr1_arr2[:arr1.shape[0], :] = arr1
arr1_arr2[arr1.shape[0]:, :arrs_to_concat.shape[1]] = arrs_to_concat
С точки зрения производительности это может быть хорошей идеей для большие массивы для использования np.empty
для предварительного выделения окончательного массива и заполнения только оставшейся фигуры с помощью np.nan
.