<p>MATLAB和Python索引不同。为了研究这个问题,让我们创建一个<code>1</code>到<code>8</code>的线性数组,然后<code>reshape</code>得到每种语言中<code>2</code>-by-<code>2</code>矩阵:</p>
<p>MATLAB软件:</p>
<pre><code>M_flat = 1:8
M = reshape(M_flat, [2,2,2])
</code></pre>
<p>它回来了</p>
^{pr2}$
<p>Python:</p>
<pre><code>import numpy as np
P_flat = np.array(range(1,9))
P = np.reshape(P, [2,2,2])
</code></pre>
<p>它回来了</p>
<pre><code>array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
</code></pre>
<p>首先你应该注意到的是前两个维度已经切换。这是因为MATLAB使用列主索引,这意味着我们首先对列进行倒计时,而Python使用行主索引,因此它首先跨行计数。在</p>
<p>现在让我们尝试索引它们。让我们试着沿着不同的维度切片。在MATLAB中,我知道如何从三维空间中提取一部分</p>
<pre><code>M(:,:,1)
ans =
1 3
2 4
</code></pre>
<p>现在让我们在Python中尝试同样的方法</p>
<pre><code>P[:,:,0]
array([[1, 3],
[5, 7]])
</code></pre>
<p>所以这完全不同。为了得到MATLAB的“等价物”,我们需要</p>
<pre><code>P[0,:,:]
array([[1, 2],
[3, 4]])
</code></pre>
<p>现在,它返回MATLAB版本的转置,由于row major与column major的差异,这是预期的。在</p>
<p>那么这对于索引来说意味着什么呢?看起来Python将主索引放在末尾,这是MALTAB的反面。在</p>
<p>假设我在MATLAB中索引如下</p>
<pre><code>M(1,2,2)
ans =
7
</code></pre>
<p>现在要从Python获得<code>7</code>,我们应该去</p>
<pre><code>P(1,1,0)
</code></pre>
<p>这是MATLAB语法的颠倒。请注意,这是相反的,因为我们在创建Python矩阵时考虑了行的主要顺序。如果您像在代码中那样创建它,那么就必须交换最后两个索引,这样就可以像Ander在注释中建议的那样首先正确地创建矩阵。在</p>