2016-12-25 1 views
0

Я хочу добавить дополнительный столбец в свою матрицу, чтобы предсказать некоторые функции с помощью некоторых алгоритмов машинного обучения.Добавить дополнительную функцию в матрицу np.Concatenate error: только массивы length-1 могут быть преобразованы в сканеры Python

Мой поезд получил 8899 строк и 11 размеров.

Все, что я хочу сделать, это добавить дополнительное измерение distance (см. Код).

Но я получил сообщение об ошибке:

only length-1 arrays can be converted to Python scalars 

temp_train_long/lat является (8899L,)

X_train = df_train.as_matrix() 
temp_train_long=(X_train[:,3] - X_train[:,7])**2#long 
temp_train_lat = (X_train[:,4] - X_train[:,8])**2#lat 
distance = np.sqrt(temp_train_long + temp_train_lat) 
np.concatenate(X_train, distance.T) 
+0

Не используйте евклидово расстояние по длине, лат. Земля не плоская. –

+0

спасибо за комментарий, но это не решает мою проблему –

ответ

0

Пересмотреть concatenate документы

конкатенации ((a1, a2, ...), ось = 0)

Функция принимает 2 аргумента. Первый - это список или кортеж, массивы, к которым вы хотите присоединиться. Второй - это число, обозначающее ось. И он возвращает новый массив. Он не работает на месте.

X_train = df_train.as_matrix() 

Так это 2d (8899, п), п больше, чем 9. Согласно pd документации это является NumPy array не NumPy matrix (это важно)

temp_train_long=(X_train[:,3] - X_train[:,7])**2#long 
temp_train_lat = (X_train[:,4] - X_train[:,8])**2#lat 

Два 1d массивы (8899,)

distance = np.sqrt(temp_train_long + temp_train_lat) 

Также (8899). distance.T ничего не делает; что не изменится в форме

np.concatenate(X_train, distance.T) 

Вы даете ему 2 аргументов, один является 2d массива, с другой стороны, в axis медленно является 1d массива.

Вы, вероятно, хотите

new_train = np.concatenate((X_train, distance[:,None]), axis=1) 

2 массива в один кортеж, ось скаляр. массив distance был преобразован в массив столбцов 2d 1.

Смежные вопросы

 Смежные вопросы