擅长:python、mysql、java
<p>构造这样一个立方体最快的方法是使用<a href="http://arma.sourceforge.net/docs.html#Cube" rel="nofollow noreferrer">advanced constructors</a>中的一个。这些允许您直接从内存的任意部分创建一个新对象,即使不复制任何数据。这在精神上最接近NumPy的重塑方式,即返回原始数据的<em>视图</em>,而不是副本。在</p>
<p>你可以这样使用构造函数:</p>
<pre><code>// Assuming a is an arma::mat.
int N = 4;
arma::cube c(a.memptr(), N, a.n_rows / N, a.n_cols, false);
</code></pre>
<p>它直接从<code>a</code>获取内存,而不进行复制,并将其用作<code>c</code>的数据。在</p>
<p>当然,这很快,但很危险。您负责保证只要<code>c</code>存在,指向的内存就有效。这意味着<code>c</code>的生存期必须严格嵌套在<code>a</code>的生存期中。这很难保证,尤其是当<code>a</code>和{<cd2>}都在堆上创建时。在</p>
<p>您还可以通过省略最后一个参数或将其设置为<code>true</code>,允许<code>c</code>复制</em><code>a</code>的数据。这比不复制构造函数花费更多的时间,但可能比从<code>a</code>的数据分配每个片段要少,因为这个构造函数只对底层数据进行一个大容量的<code>memcpy</code>。在</p>
<p>所有这些都取决于@ewcz的答案所提出的行与列的主要观点。确保你知道你在重塑时得到了什么,尤其是当你使用高级构造函数的时候。在</p>