Почему numpy.ravel () требуется в этом коде, который производит маленькие кратные? - PullRequest
0 голосов
/ 21 мая 2018

Я нашел некоторый код для генерации набора маленьких кратных , и он работает отлично.

fig, axes = plt.subplots(6,3, figsize=(21,21))
fig.subplots_adjust(hspace=.3, wspace=.175)
for ax, data in zip(axes.ravel(), clean_sets):
    ax.plot(data.ETo, "o")

Линия for ax, data in zip(axes.ravel(), clean_sets): contians .ravel() но я не понимаю, что это на самом деле делает или почему это необходимо.

Если я взгляну на docs Нахожу следующее:

Возвращает непрерывный уплощенный массив.

1-D массив, содержащий элементы ввода, имеет видвернулся.Копирование выполняется только при необходимости.

Я полагаю, что возвращаемое значение, соответствующее осям из plt.subplot(), представляет собой многомерный массив, который не может быть повторен, но на самом деле я не уверен.Простое объяснение будет с благодарностью.


Какова цель использования .ravel() в этом случае?

1 Ответ

0 голосов
/ 21 мая 2018

Ваше предположение верно.plt.subplots() возвращает либо Axes, либо массив с несколькими осями, углубляясь на входе.В случае, если двумерная сетка определяется аргументами nrows и ncols, возвращаемый массив numpy будет также двумерным массивом.

Это поведение объясняется в документации pyplot.subplots внутри аргумента squeeze,

squeeze: bool, необязательно, по умолчанию: True
Если True, из возвращаемого объекта Axes выжимаются дополнительные измерения:

  • если построен только один подзаговор (nrows = ncols = 1), результирующий одиночный объект Axes возвращается как скаляр.
  • для Nx1 или 1xN субплощадок, возвращаемый объект - это массив 1D numpy объектов, объекты Axes возвращаются как массивы 1D.
  • для NxM, субплоты с N> 1 и M> 1:возвращается в виде 2D-массивов.

Если установлено значение False, сжатие вообще не выполняется: возвращаемый объект Axes всегда является 2D-массивом, содержащим экземпляры Axes, даже если он заканчивается 1x1.

Так как здесь у вас есть plt.subplots(6,3) и, следовательно, N>1, M>1, результирующий объект обязательно является 2D-массивом, независимо от того, для чего установлено squeeze.

Это делает необходимым сгладить этомассив для того, чтобы иметь возможность zip его.Варианты:

  • zip(axes.ravel())
  • zip(axes.flatten())
  • zip(axes.flat)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...