<p>让我们试试比较,注意使形状和价值多样化。在</p>
<pre><code>octave:7> a=reshape(0:11,3,4)
a =
0 3 6 9
1 4 7 10
2 5 8 11
octave:8> repmat(a,[1,1,2])
ans =
ans(:,:,1) =
0 3 6 9
1 4 7 10
2 5 8 11
ans(:,:,2) =
0 3 6 9
1 4 7 10
2 5 8 11
</code></pre>
<p>numpy等价物-或多或少:</p>
^{pr2}$
<p>再次numpy,但是使用<code>order F</code>来更好地匹配matlabfortran派生的布局</p>
<pre><code>In [63]: a=np.arange(12).reshape(3,4,order='F')
In [64]: np.tile(a,[2,1,1])
Out[64]:
array([[[ 0, 3, 6, 9],
[ 1, 4, 7, 10],
[ 2, 5, 8, 11]],
[[ 0, 3, 6, 9],
[ 1, 4, 7, 10],
[ 2, 5, 8, 11]]])
</code></pre>
<p>我在开始时添加了新的numpy维度,因为在很多方面它可以更好地复制MATLAB在结尾添加它的实践。在</p>
<p>尝试在末尾添加新维度。形状是(3,4,5),但您可能不喜欢显示。在</p>
<pre><code> np.tile(a[:,:,None],[1,1,2])
</code></pre>
<p>另一个需要考虑的问题是,当你把瓷砖弄平后会发生什么?在</p>
<pre><code>octave:10> repmat(a,[1,1,2])(:).'
ans =
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11
</code></pre>
<p>顺序为F<code>a</code></p>
<pre><code>In [78]: np.tile(a[:,:,None],[1,1,2]).flatten()
Out[78]:
array([ 0, 0, 3, 3, 6, 6, 9, 9, 1, 1, 4, 4, 7, 7, 10, 10, 2,
2, 5, 5, 8, 8, 11, 11])
In [79]: np.tile(a,[2,1,1]).flatten()
Out[79]:
array([ 0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11, 0, 3, 6, 9, 1,
4, 7, 10, 2, 5, 8, 11])
</code></pre>
<p>使用C顺序数组:</p>
<pre><code>In [80]: a=np.arange(12).reshape(3,4)
In [81]: np.tile(a,[2,1,1]).flatten()
Out[81]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11])
</code></pre>
<p>最后一个匹配八度音阶布局。在</p>
<p>也是这样:</p>
<pre><code>In [83]: a=np.arange(12).reshape(3,4,order='F')
In [84]: np.tile(a[:,:,None],[1,1,2]).flatten(order='F')
Out[84]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11])
</code></pre>
<p>困惑了吗?在</p>