擅长:python、mysql、java
<p><strong>简短回答:</strong></p>
<p>对向量<code>r</code>进行“成对外减法”的(几乎)纯Python方法如下:</p>
<pre class="lang-py prettyprint-override"><code>np.array(map(operator.sub, *zip(*product(r, r)))).reshape((2, 2, -1))
</code></pre>
<p>所以基本上可以使用<code>product</code>函数来获得所有可能的列表项对,取消<code>zip</code>得到两个独立的列表,并将它们<code>map</code>转换成减法<code>operator</code>。最后你可以像往常一样<code>reshape</code>。在</p>
<p><strong>循序渐进:</strong></p>
<p>下面是一个逐步示例,其中包含所有必需的库和中间结果的输出:</p>
^{pr2}$
<p>输出:</p>
<pre><code>Vectors:
[[0 1 2]
[3 4 5]]
Product:
[(array([0, 1, 2]), array([0, 1, 2])), (array([0, 1, 2]), array([3, 4, 5])), (array([3, 4, 5]), array([0, 1, 2])), (array([3, 4, 5]), array([3, 4, 5]))]
Zipped:
[(array([0, 1, 2]), array([0, 1, 2]), array([3, 4, 5]), array([3, 4, 5])), (array([0, 1, 2]), array([3, 4, 5]), array([0, 1, 2]), array([3, 4, 5]))]
Mapped:
[array([0, 0, 0]), array([-3, -3, -3]), array([3, 3, 3]), array([0, 0, 0])]
Reshaped:
[[[ 0 0 0]
[-3 -3 -3]]
[[ 3 3 3]
[ 0 0 0]]]
</code></pre>
<p>(请注意,为了创建示例数组,我需要切换维度<code>2</code>和<code>3</code>)</p>