2016-09-25 3 views
2

Я заметил, что для массива ранга 1 с 3 элементами numpy возвращает (3,) для фигуры. Я знаю, что этот кортеж представляет размер массива вдоль каждого измерения, но почему он не (3,1)?Для np.array ([1, 2, 3]) почему форму (3,) вместо (3,1)?

import numpy as np 

a = np.array([1, 2, 3]) # Create a rank 1 array 
print a.shape   # Prints "(3,)" 

b = np.array([[1,2,3],[4,5,6]]) # Create a rank 2 array 
print b.shape      # Prints "(2, 3)" 
+1

Один комплект кронштейнов, одно измерение. – hpaulj

ответ

6

в двух словах, это происходит потому, что это один-мерный массив (отсюда один -элемент формы кортежа). Возможно, следующее будет помочь очистить вещи:

>>> np.array([1, 2, 3]).shape 
(3,) 
>>> np.array([[1, 2, 3]]).shape 
(1, 3) 
>>> np.array([[1], [2], [3]]).shape 
(3, 1) 

Мы можем даже пойти три измерения (и выше):

>>> np.array([[[1]], [[2]], [[3]]]).shape 
(3, 1, 1) 
-2

Вы можете одинаково спросить, «Почему форма не (3,1,1,1,1,1,1)? Они эквивалентны, в конце концов.

NumPy часто выбирает разрушаться особые размеры, или рассматривать их как дополнительные, например, во время broadcasting. Это является мощным, так как 3-вектор имеет точно такое же количество элементов, и в той же относительной ориентации, в качестве матрицы 3x1x1x1x1x1.

+1

Это неверно - трансляция игнорирует _leading_ измерения длины 1, а не конечные. Итак, '1x1x1x1x1x3' совпадает с' 3' – Eric

+0

'numpy' может добавлять ведущие 1s во время трансляции, но не игнорирует их, будь то ведущий или конечный. Для их удаления используется 'squeeze' или индексация. – hpaulj

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