Склеивание numpy массивов поэлементно

Нужно склеить массивы (первый элемент первого с первым, второй элемент со вторым и т.д., чтобы в итоге получилось что-то вроде скалярного произведения array([0.5, 0], [0.5, 1]) Придуманный мной вариант почему-то дублирует элементы: [[0.5, 0], [0.5, 1], [0.5, 0], [0.5, 1]] В идеале хотелось бы обойтись без циклов, но не знаю как реализовать

  X_train =  np.array([[1, 1], [2, 2]])
  y_train =  np.array([0, 1])
  X_test =  np.array([[1.5, 1.5]])

a = np.sum((X_test - X_train)**2, axis=1)
print([[i, j] for i in a for j in y_train])

Ответы (1 шт):

Автор решения: MarianD

Примените функцию np.column_stack() или np.stack():

np.column_stack((a, y_train))         # или np.stack((a, y_train), axis=1)

Результат:

array([[0.5, 0. ],
       [0.5, 1. ]])

Примечание:

Вами предложенный результат array([0.5, 0], [0.5, 1]) не возможен, в numpy не существует массив с элементами типа списков.

Вы, вероятно, пропустили внешние квадратные (или обычные) скобки, нужные для получения 2-мерного массива чисел:

  • np.array([0.5, 0], [0.5, 1]) выдает ошибку (второй параметр должен быть тип элементов), но

  • np.array(([0.5, 0], [0.5, 1])) создает правильный двухмерный массив:

    array([[0.5, 0. ],
           [0.5, 1. ]])
    
→ Ссылка