<p>你自己选吧:</p>
<pre><code>In [629]: coord_mask = np.zeros((10, 5), dtype=np.bool)
...: latx = np.random.choice(a=[False, True], size=10)
...: laty = np.random.choice(a=[False, True], size=5)
...:
...: for i in range(0, coord_mask.shape[0]):
...: for j in range(0, coord_mask.shape[1]):
...: coord_mask[i, j] = latx[i] * laty[j]
...:
In [630]: coord_mask
Out[630]:
array([[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, False, False, False, False]], dtype=bool)
</code></pre>
<p>广播乘法:<code>None</code>将<code>latx</code>转换为(n,1)列矩阵,该矩阵将一个(m,)<code>laty</code>(相当于<code>(1,m)</code>)多重叠加,产生(n,m)结果。这是一个非常方便、功能强大的<code>numpy</code>工具。在</p>
^{pr2}$
<p><code>outer</code></p>
<pre><code>In [632]: np.outer(latx, laty)
Out[632]:
array([[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, False, False, False, False]], dtype=bool)
</code></pre>
<p>点积的einsum推广:</p>
<pre><code>In [633]: np.einsum('i,j',latx, laty)
Out[633]:
array([[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, False, False, False, False]], dtype=bool)
</code></pre>
<p>使用<code>broadcasting</code>方法,您可以替换另一个二进制操作,如<code>&</code>:</p>
<pre><code>In [634]: latx[:,None] & laty
Out[634]:
array([[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False],
[False, False, False, False, False]], dtype=bool)
</code></pre>