numpy中所有可能的列式乘法?

时间:2017-06-23 20:02:13

标签: python numpy

我使用了形状m * nm行和n列的输入矩阵。我希望计算 columns 的所有可能组合的元素乘积。因此,我需要输出一个形状为m * n*n的矩阵。
更具体地说,让我们说我的输入矩阵有[c1, c2, c3 ... cn]列。我的输出矩阵应该看起来像[c1*c1 c1*c2 ... c1*cn c2*c1 c2*c2 ... cn*cn],其中ci*cj是一个向量,表示向量cicj的元素乘法。

我不想使用for循环,寻找使用numpy API执行此操作的简洁方法。

1 个答案:

答案 0 :(得分:2)

一种方法是在将输入数组扩展到两个3D扩展版本之后使用broacasting,沿着第二个和第三个具有单个维度,然后执行逐元素乘法并且需要最终重构最终输出2D

因此,实现将是 -

(a[:,:,None]*a[:,None,:]).reshape(a.shape[0],-1)

换句话说,使用...并跳过None后第二个扩展版本的最后一个轴,将是 -

(a[...,None]*a[:,None]).reshape(a.shape[0],-1)

使用np.einsum -

的另一种方法
np.einsum('ij,ik->ijk',a,a).reshape(a.shape[0],-1)