Размерность массива (ndim) — это количество измерений (осей) у numpy.ndarray.

Технически, ndim — это длина shape.

Примеры:

0D массив (скаляр):

a = np.array(5)
a.ndim    # 0
a.shape   # ()

1D массив (вектор):

b = np.array([1, 2, 3])
b.ndim    # 1
b.shape   # (3,)

2D массив (матрица):

c = np.array([[1, 2, 3],
              [4, 5, 6]])
c.ndim    # 2
c.shape   # (2, 3)

3D массив:

d = np.zeros((2, 3, 4))
d.ndim    # 3

Ключевые моменты:

ndim говорит сколько осей, а не сколько элементов
– одинаковое количество элементов может иметь разную ndim
– увеличение ndim не меняет данные, только их интерпретацию

Пример:

a = np.arange(6)        # ndim = 1, shape (6,)
b = a.reshape(1, 6)     # ndim = 2, shape (1, 6)
c = a.reshape(2, 3)     # ndim = 2, shape (2, 3)

Практическое понимание:

ndim определяет, как данные участвуют в операциях
– broadcasting, суммирование по осям (axis), линейная алгебра — всё завязано на ndim
– частая причина ошибок — путаница между (n,), (1, n) и (n, 1)

Если кратко:
ndim — это число независимых индексов, нужных для доступа к элементу массива.