擅长:python、mysql、java
<p>这有帮助吗?在</p>
<pre><code>In [439]: d=np.array([13,15])
In [440]: power=np.ones((d.shape[0],1))*(2**np.arange(8))
In [441]: power
Out[441]:
array([[ 1., 2., 4., 8., 16., 32., 64., 128.],
[ 1., 2., 4., 8., 16., 32., 64., 128.]])
In [442]: np.floor((d[:,None]%(2*power))/power)
Out[442]:
array([[ 1., 0., 1., 1., 0., 0., 0., 0.],
[ 1., 1., 1., 1., 0., 0., 0., 0.]])
</code></pre>
<p>我们甚至不需要<code>ones</code>:</p>
^{pr2}$
<p>当针对<code>power</code>广播<code>d</code>时,<code>power</code>的维度扩展是自动的:<code>d[:,None]%(2*power[None,:])</code>。MATLAB中的<code>ones</code>实现了相同的维数扩展(到(2,8)形状的数组)。在</p>
<p>可能需要从<code>d=np.atleast_1d(d)</code>开始,因此它将标量大小写视为1元素数组。我们可以对其进行优化,使其在给定标量时返回1d数组,在给定list或1d数组时返回2d数组。在MATLAB中,一切都是2d或更高。在</p>
<hr/>
<p>更好的是,在展开<code>d</code>时使用<code>ellipsis</code>。那么d可以是0d,1d,甚至nd。在</p>
<pre><code>np.floor((d[...,None]%(2*power))/power)
</code></pre>