Спасибо. Я понял. Я был так смущен этим!

я простой вопрос о функции .shape, который меня сильно смутил.

a = np.array([1, 2, 3])   # Create a rank 1 array
print(type(a))            # Prints "<class 'numpy.ndarray'>"
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)"

Что конкретно сделал .shape? посчитайте, сколько строк, сколько столбцов, то a.shape, как предполагается, (1,3), одна строка три столбца, верно?

Ответы на вопрос(2)

numpy в основном с самого начала касается «произвольно-размерных» массивов, поэтому основной класс называетсяndarray, Вы можете проверить размерность массива с помощью.ndim свойство..shape свойство кортеж длины.ndim содержащий длину каждого измерения. В настоящее время NumPy может обрабатывать до 32 размеров:

a = np.ones(32*(1,))
a
# array([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ 1.]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]])
a.shape
# (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
a.ndim
# 32

Если числовой массив выглядит как 2d, как ваш второй пример, тогда уместно думать об этом в терминах строк и столбцов. Но массив 1d в numpy - это действительно 1d, без строк или столбцов.

Если вы хотите что-то вроде вектора строки или столбца, вы можете достичь этого, создав 2d-массив с одним из его измерений, равным 1.

a = np.array([[1,2,3]]) # a 'row vector'
b = np.array([[1],[2],[3]]) # a 'column vector'
# or if you don't want to type so many brackets:
b = np.array([[1,2,3]]).T
 Pumpkin C30 нояб. 2017 г., 02:59
Спасибо. Я понял. Я был так смущен этим!
Решение Вопроса

yourarray.shape или жеnp.shape() или жеnp.ma.shape() возвращает форму вашего ndarray каккортеж; И вы можете получить размеры вашего массива, используяyourarray.ndim или жеnp.ndim().

Для1D массив, форма будет(n,) гдеn количество элементов в вашем массиве

Для2D массив, форма будет(n,m) гдеn это количество строк иm это количество столбцов в вашем массиве.

Обратите внимание, что в1D случай, форма будет просто(n, ) вместо того, что вы сказали как либо(1, n) или же(n, 1) для векторов строк и столбцов соответственно.

Это должно следовать соглашению, которое:

Для 1D массива вернутьформа кортежа только с1 элемент (т.е.(n,))
Для двумерного массива вернутьформа кортежа только с2 элементы (т.е.(n,m))
Для трехмерного массива, вернутьформа кортежа только с3 элементы (т.е.(n,m,k))
Для массива 4D вернутьформа кортежа только с4 элементы (т.е.(n,m,k,j))

и так далее.

Также, пожалуйста, посмотрите пример ниже, чтобы увидеть, какnp.shape() или жеnp.ma.shape() ведет себя с1D массивы и скаляры:

# sample array
In [10]: u = np.arange(10)

# get its shape
In [11]: np.shape(u)    # u.shape
Out[11]: (10,)

# get array dimension using `np.ndim`
In [12]: np.ndim(u)
Out[12]: 1

In [13]: np.shape(np.mean(u))
Out[13]: ()       # empty tuple (to indicate that a scalar is a 0D array).

# check using `numpy.ndim`
In [14]: np.ndim(np.mean(u))
Out[14]: 0

Постскриптум: Так чтоформа кортежа являетсяпоследовательный с нашим пониманием размеров пространства, по крайней мере, математически.

 Pumpkin C30 нояб. 2017 г., 02:59
Спасибо за примеры!
 Alexander Reynolds30 нояб. 2017 г., 05:10
Я думаю, что ваше объяснение будет еще более полным, добавив в документацию для.shape и, возможно, в том числе.ndim также:docs.scipy.org/doc/numpy-1.13.0/reference/generated/...

Ваш ответ на вопрос