2016-07-11 2 views
2

Я считаю, что мне часто приходится менять форму (5,) на (5,1), чтобы использовать точечный продукт. Что я не могу использовать только точечный продукт с вектором формы (5,)?numpy: В чем разница между вектором формы (5,1) и (5,)?

+3

http://stackoverflow.com/questions/22053050/difference-between-numpy-array-shape-r-1-and-r?rq=1 –

+0

_ "Что я не могу просто использовать точечный продукт с вектором формы (5,) "_ - вы ** можете ** сделать именно это – Eric

ответ

2

Чтобы использовать скалярное произведение, необходима матрица (представленную с 2D массивов). Массив с размером (5) является плоской матрицей (1D-массив) из 5 элементов, где as (5, 1) - матрица с 1 столбцом и 5 строками.

>>> import numpy as np 
>>> np.zeros((5,)) 
array([ 0., 0., 0., 0., 0.]) # single flat array 
>>> np.zeros((1,5)) 
array([[ 0., 0., 0., 0., 0.]]) # array with-in array 
>>> np.zeros((5,1)) 
array([[ 0.], 
     [ 0.], 
     [ 0.], 
     [ 0.], 
     [ 0.]]) 
>>> 
2

Это связано с тем, что при создании массива с arr = np.ones((5)) он будет получать 1D массив из 5 элементов, с другой стороны, когда вы создаете массив с arr = np.ones((5, 1)), он создает 2D-массив с 5 строками и 1 столбец. Следующий пример делает его более ясным для вас:

>>> import numpy as np 
>>> a = np.ones((5, 1)) 
>>> a 
array([[ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.]]) 
>>> a = np.ones((5)) 
>>> a 
array([ 1., 1., 1., 1., 1.]) 
Смежные вопросы