<p>现有的答案指出Python是0索引的,这是正确的,但是还没有人指出您甚至不需要使用<code>np.zeros</code>或使用任何<code>for</code>循环来创建空数组</p>
<p>Numpy已经允许您沿阵列的特定<em>轴</em>应用大多数操作,而不是在子立方体的维度上循环,一次只求和一个像素</p>
<p>例如,让我们制作一个3x4x4数据立方体:</p>
<pre class="lang-py prettyprint-override"><code>>>> cube = np.arange(3 * 4 * 4).reshape((3, 4, 4))
>>> cube
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]],
[[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]],
[[32, 33, 34, 35],
[36, 37, 38, 39],
[40, 41, 42, 43],
[44, 45, 46, 47]]])
</code></pre>
<p>假设您要将此立方体的3x3切片的所有层相加:</p>
<pre class="lang-py prettyprint-override"><code>>>> cube[:, :3, :3].sum(axis=0)
array([[48, 51, 54],
[60, 63, 66],
[72, 75, 78]])
</code></pre>
<p>在你的情况下,等价物是</p>
<pre class="lang-py prettyprint-override"><code>subcube[:, :ydim, :xdim].sum(axis=0)
</code></pre>
<p>这相当于您正在尝试的操作,但效率要高得多</p>
<p>一般来说,尽管您从FITS文件中读取数据立方体,但由于<code>astropy.io.fits</code>返回一个Numpy数组,因此您可以找到的关于Numpy数组的任何文档或问题通常都适用于它,因为它来自FITS文件在这一点上并不重要。我指出这一点,只是因为如果您正在努力在Numpy阵列上执行操作,它可能会在将来对您有所帮助</p>