numpy.shape дает непоследовательные ответы – почему?

Я новичок на питоне. Я хотел бы знать, почему программа

import numpy as np c = np.array([1,2]) print(c.shape) d = np.array([[1],[2]]).transpose() print(d.shape) 

дайте

 (2,) (1,2) 

как его выход? Разве это не должно быть

 (1,2) (1,2) 

вместо? Я получил это как в python 2.7.3, так и в python 3.2.3

Благодаря!

Когда вы вызываете атрибут .shape для ndarray , вы получаете кортеж с таким количеством элементов, как размеры вашего массива. Длина, т. Е. Количество строк, является первым размером ( shape[0] )

  • Вы начинаете с массива: c=np.array([1,2]) . Это простой массив 1D, поэтому его форма будет 1-элементным кортежем, а shape[0] – количество элементов, поэтому c.shape = (2,)
  • Рассмотрим c=np.array([[1,2]]) . Это 2D-массив с 1 строкой. Первая и единственная строка – [1,2] , что дает нам два столбца. Следовательно, c.shape=(1,2) и len(c)=1
  • Рассмотрим c=np.array([[1,],[2,]]) . Другой 2D-массив с 2 строками, 1 столбец: c.shape=(2,1) и len(c)=2 .
  • Рассмотрим d=np.array([[1,],[2,]]).transpose() : этот массив такой же, как np.array([[1,2]]) , поэтому его форма (1,2) .

Другим полезным атрибутом является .size : это количество элементов во всех измерениях, и у вас есть массив c c.size = np.product(c.shape) .

Дополнительная информация о форме в документации .

len(c.shape) – это «глубина» массива.

Для c массив – это просто список (вектор), глубина – 1.
Для d массив представляет собой список списков, глубина – 2.

Заметка:

 c.transpose() # array([1, 2]) 

который не является d , поэтому это поведение не противоречит.

 dt = d.transpose() # array([[1], # [2]]) dt.shape # (2,1) 

transpose не изменяет количество измерений массива. Если c.ndim == 1 , c.transpose() == c . Пытаться:

 c = np.array([1,2]) print c.shape print cTshape c = np.atleast_2d(c) print c.shape print cTshape