Объединить массив с одинаковым количеством строк, но с разными столбцами - PullRequest
2 голосов
/ 21 июня 2020
def preprocess(numerical , categorical):
    imputer = SimpleImputer()
    x_num = imputer.fit_transform(numerical)
    scaler = StandardScaler()
    x_num = scaler.fit_transform(x_num)
    one_hot = OneHotEncoder()
    x_cat = one_hot.fit_transform(categorical)
    print('X_num Shape : ' , x_num.shape)
    print('X_cat Shape : ' , x_cat.shape)
    
    return np.concatenate((x_num,x_cat),axis = 1)
[Output] X_num Shape :  (889, 2)
         X_cat Shape :  (889, 22)

Ошибка, отображаемая в конце: ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 0 dimension(s)

Я хочу, чтобы результат имел форму (889,24)

последнее предложение (массив в индекс 1 имеет 0 измерений) заставляет меня думать, что проблема связана со странными numpy массивами формы (n,) и (, n), но это не должно быть проблемой, поскольку размеры, как показано, не такие но я думаю, что мне чего-то не хватает

Я также пробовал использовать много разных функций np.hstack , np.vstack , np.column_stack, но они либо не дают желаемого результата, либо показывают это сообщение об ошибке ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 1

1 Ответ

0 голосов
/ 21 июня 2020

Итак, как hpaulj упомянул выше, проблема заключалась в том, что тип x_cat после выхода из OneHotEncoder был <class 'scipy.sparse.csr.csr_matrix'> вместо массива numpy, который не может быть объединен с другим массивом numpy, что приводит к его приведению в массив numpy при объединении, и его размер был () с помощью команды shape. не уверен, означает ли это, что он был сплющен или нет, но когда я попытался использовать изменение формы, он не сработал и сказал: ValueError: cannot reshape array of size 1 into shape (889,22)

Для решения этой проблемы я заменил строку one_hot = OneHotEncoder() на one_hot = OneHotEncoder(sparse = False), которая делает тип выходной матрицы плотным массивом numpy, который можно объединить, используя np.concatenate((x_num,x_cat),axis = 1 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...