我使用了形状m * n
或m
行和n
列的输入矩阵。我希望计算 columns 的所有可能组合的元素乘积。因此,我需要输出一个形状为m * n*n
的矩阵。
更具体地说,让我们说我的输入矩阵有[c1, c2, c3 ... cn]
列。我的输出矩阵应该看起来像[c1*c1 c1*c2 ... c1*cn c2*c1 c2*c2 ... cn*cn]
,其中ci*cj
是一个向量,表示向量ci
和cj
的元素乘法。
我不想使用for
循环,寻找使用numpy
API执行此操作的简洁方法。
答案 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)