迭代一个ndarray

时间:2017-12-29 17:52:11

标签: python numpy

使用二维数组"轴"运行此代码时:

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?

1 个答案:

答案 0 :(得分:3)

nditer循环中,您不会迭代数组的元素。您正在迭代0维子阵列,每个子阵列都是axes单个单元格的只读视图。您正在查看的type是0维子阵列的类型,而不是实际的数组内容。

如果要迭代object dtype的N维数组中的对象,最简单的方法是迭代axes.flat

for ax in axes.flat:
    do_whatever_with(ax)

对于其他dtypes的数组,通常最好避免显式迭代。