使用二维数组"轴"运行此代码时:
print(axes.shape)
print(axes)
for ax in np.nditer(axes, flags=["refs_ok"]):
print(type(ax))
生成此输出:
(10, 4)
[[<matplotlib.axes._subplots.AxesSubplot object at 0x1a215d8908>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1dcd37b8>
<matplotlib.axes._subplots.AxesSubplot object at 0x115e3ad30>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1df18b00>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x115e84f60>
<matplotlib.axes._subplots.AxesSubplot object at 0x115e84780>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1e163f60>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a23a75208>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a23a54860>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1b5ffb00>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a239a5550>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1e4bd6a0>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a20238be0>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1d0becf8>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a21ce1d30>
<matplotlib.axes._subplots.AxesSubplot object at 0x1165de6a0>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a1d2feb70>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1ceee320>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a2000d9e8>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1e2fe278>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a1b6f8da0>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1d361dd8>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a21dd0470>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1e6f93c8>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a206b3320>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a20568588>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1b5d79b0>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1cadebe0>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a1e536208>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1b173cc0>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a21a09f60>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1e58f588>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a221ee048>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a21b76e80>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1f6209b0>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a21b54d68>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x1a1fbb6358>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1b52fe80>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a1e5108d0>
<matplotlib.axes._subplots.AxesSubplot object at 0x1a2034fb38>]]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
在我看来,数组的第一级包含10个子数组或行,每个包含四个AxesSubPlot对象。那么,为什么for循环的输出会说它们是ndarrays?
答案 0 :(得分:3)
在nditer
循环中,您不会迭代数组的元素。您正在迭代0维子阵列,每个子阵列都是axes
单个单元格的只读视图。您正在查看的type
是0维子阵列的类型,而不是实际的数组内容。
如果要迭代object
dtype的N维数组中的对象,最简单的方法是迭代axes.flat
:
for ax in axes.flat:
do_whatever_with(ax)
对于其他dtypes的数组,通常最好避免显式迭代。