[英]Why is numpy.ravel() required in this code that produces small multiples?
我找到了一些代碼來生成一組小的倍數,它運行良好。
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()
但我不明白這實際上在做什么或為什么有必要。
如果我查看文檔,我會發現以下內容:
返回一個連續的扁平數組。
返回包含輸入元素的一維數組。 僅在需要時制作副本。
我猜對應於來自plt.subplot()
軸的返回是一個無法迭代的多維數組,但我真的不確定。 一個簡單的解釋將不勝感激。
在這種情況下使用.ravel()
的目的是什么?
你的猜測是正確的。 plt.subplots()
返回Axes
或多個軸的numpy
數組,具體取決於輸入。 如果 2D 網格由參數nrows
和ncols
定義,則返回的numpy
數組也將是 2D 數組。
這種行為在squeeze
參數中的pyplot.subplots
文檔中進行了解釋,
squeeze
:布爾,可選,默認值:真
如果為 True,則從返回的 Axes 對象中擠出額外的維度:
- 如果僅構造一個子圖 (nrows=ncols=1),則生成的單個 Axes 對象將作為標量返回。
如果為 False,則根本不進行壓縮:返回的 Axes 對象始終是包含 Axes 實例的二維數組,即使它最終是 1x1。
因為在這里你有plt.subplots(6,3)
,因此N>1, M>1
,結果對象必然是一個二維數組,與squeeze
設置無關。
這使得有必要展平這個數組以便能夠zip
它。 選項是
zip(axes.ravel())
zip(axes.flatten())
zip(axes.flat)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.