2015-06-05 3 views
4

Если я создаю массив X = np.random.rand(D, 1) это форма (3L, 1L):Как изменить формы массива в numpy?

[[ 0.31215124] 
[ 0.84270715] 
[ 0.41846041]] 

Если я создаю свой собственный массив A = np.array([0,1,2]), то он имеет форму (3L,) и выглядит как

[0 1 2] 

Как я могу заставить форму (3L, 1L) на мой массив A?

+0

Извините, что вы ищете 'A.reshape ([3,1])'? – EdChum

ответ

0

Вы можете установить directy форму, т.е.

A.shape = (3L, 1L) 

или вы можете использовать функцию изменения размера:

A.resize((3L, 1L)) 

или при создании с RESHAPE

A = np.array([0,1,2]).reshape((3L, 1L)) 
+0

Следует избегать обоих назначений 'shape' и' resize', если вы не знаете, что делаете, потому что у них обоих есть поведение, которое, вероятно, удивит новых пользователей. –

2

NumPy уже есть " reshape ", который равен numpy.ndarray.shape, вы можете использовать его для изменения формы вашего массива.

A.shape = (3,1) 
+0

Почему голос? –

+1

Возможно, кто-то придирчиво относится к использованию вами функции. 'np.reshape' - это функция,' A.reshape' метод и 'A.shape =' функциональность? Все они выполняют ту же работу. – hpaulj

+0

Установка 'shape' иногда вызывает ошибку, во всех случаях это не гарантируется. Просто добавляя информацию, я не голосую. –

1

NumPy модуль имеет reshape функцию и ndarray имеет метод reshape, либо из них должны работать, чтобы создать массив с формой вы хотите:

import numpy as np 
A = np.reshape([1, 2, 3, 4], (4, 1)) 
# Now change the shape to (2, 2) 
A = A.reshape(2, 2) 

Numpy будет проверять, что размер массива не изменяется, то есть prod(old_shape) == prod(new_shape). Из-за этого отношения, вы позволили заменить одно из значений в форме с -1 и NumPy будет понять это для вас:

A = A.reshape([1, 2, 3, 4], (-1, 1)) 
2
A=np.array([0,1,2]) 
A.shape=(3,1) 

или

A=np.array([0,1,2]).reshape((3,1)) #reshape takes the tuple shape as input 
Смежные вопросы