簡體   English   中英

為什么在這個產生小倍數的代碼中需要 numpy.ravel() ?

[英]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 網格由參數nrowsncols定義,則返回的numpy數組也將是 2D 數組。

這種行為在squeeze參數中的pyplot.subplots文檔中進行了解釋,

squeeze :布爾,可選,默認值:真
如果為 True,則從返回的 Axes 對象中擠出額外的維度:

  • 如果僅構造一個子圖 (nrows=ncols=1),則生成的單個 Axes 對象將作為標量返回。
  • 對於 Nx1 或 1xN 子圖,返回的對象是一個 1D numpy 對象數組,Axes 對象作為 numpy 1D 數組返回。
  • 對於 NxM,N>1 和 M>1 的子圖作為二維數組返回。

如果為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM