擅长:python、mysql、java
<p>最简单的方法可能是使用<code>np.full</code>。这里的关键是使用广播来确保填写正确的维度:</p>
<pre><code>result = np.full(T.shape, p.reshape(1, -1, 1, 1))
</code></pre>
<p>您可以通过类似的操作使用<code>tile</code>获得类似的结果:</p>
<pre><code>s = list(T.shape)
s[1] = 1
result = np.tile(p.reshape(1, -1, 1, 1), s)
</code></pre>
<p>作业也有效:</p>
<pre><code>result = np.empty_like(T)
T[:] = p.reshape(1, -1, 1, 1)
</code></pre>
<p>您甚至可以使用直接广播:</p>
<pre><code>result = np.broadcast_to(p.reshape(1, -1, 1, 1), T.shape)
</code></pre>
<p>这是一个根本不复制数据的版本</p>
<p>在所有情况下,我都假设您将<code>p</code>转换为数组,例如使用<code>p = np.array(p)</code>。如果不是,用<code>np.reshape(p, (...))</code>替换<code>p.reshape(...)</code>。也可以省略前导单位尺寸标注,因为广播将向右对齐。例如,在所有情况下<code>1, -1, 1,1</code>都可以替换为<code>-1, 1, 1</code></p>