2016-03-27 3 views
1

У меня есть массив:Как добавить их в матрицу?

X = [[2, 2, 2], 
    [3, 3, 3], 
    [4, 4, 4]] 

Мне нужно добавить дополнительный столбец в Numpy массив и заполнить его с тех использованием hstack и перекраивать. Как что:

X = [[2, 2, 2, 1], 
    [3, 3, 3, 1], 
    [4, 4, 4, 1]] 

Что я делаю:

X = np.hstack(X, np.ones(X.reshape(X, (2,3)))) 

И получите ошибку:

TypeError: only length-1 arrays can be converted to Python scalars 

Что проблема? Что я сделал не так?

+1

Попробуйте 'np.column_stack'. – Divakar

+1

Проблема заключается в вызове 'np.ones()'. Вы дали ему массив, а не набор размеров. Поэкспериментируйте с этим. – hpaulj

ответ

4

Вот несколько способов с numpy.append, numpy.hstack или numpy.column_stack:

# numpy is imported as np 
>>> x 
array([[2, 2, 2], 
     [3, 3, 3], 
     [4, 4, 4]]) 
>>> np.append(x, np.ones([x.shape[0], 1], dtype=np.int32), axis=1) 
array([[2, 2, 2, 1], 
     [3, 3, 3, 1], 
     [4, 4, 4, 1]]) 
>>> np.hstack([x, np.ones([x.shape[0], 1], dtype=np.int32)]) 
array([[2, 2, 2, 1], 
     [3, 3, 3, 1], 
     [4, 4, 4, 1]]) 
>>> np.column_stack([x, np.ones([x.shape[0], 1], dtype=np.int32)]) 
array([[2, 2, 2, 1], 
     [3, 3, 3, 1], 
     [4, 4, 4, 1]]) 
+0

Спасибо timgeb. Вы используете форму. Решить этот вопрос, используя reshape, не может быть реальным? –

+1

@AlexSavin reshaping вернет новый массив с новой формой, я не думаю, что это было бы слишком полезно, так как вы не можете изменить общий размер массива с изменением формы. – timgeb

+0

@timggeb Хорошо, что реализация добавляет столбец в конец матрицы (np.hstack ...). Но как добавить столбцы в начало матрицы? –

1

Вы можете использовать numpy.insert():

>>> X 
array([[2, 2, 2], 
     [3, 3, 3], 
     [4, 4, 4]]) 

Ones в начале матрицы:

>>> X=np.insert(X,0,1.0,axis=1) 
>>> X 
array([[1, 2, 2, 2], 
     [1, 3, 3, 3], 
     [1, 4, 4, 4]]) 

Ones в конец матрицы

>>> X=np.insert(X,3,1.0,axis=1) 
>>> X 
array([[2, 2, 2, 1], 
     [3, 3, 3, 1], 
     [4, 4, 4, 1]])