Склеивание 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 шт):
Примените функцию 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. ]])