我使用的是 m * n
形状的输入矩阵,或 m
行和 n
列。我希望计算列的所有可能组合的逐元素乘积。因此,我需要输出形状为 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 来完成此操作的巧妙方法。
最佳答案
一种方法是使用 broacasting
将输入数组扩展为两个 3D
扩展版本(沿第二个和第三个维度具有单维),然后执行逐元素乘法,并且需要对 2D
最终进行最终 reshape 输出。
因此,实现将是 -
(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)
关于python - numpy 中所有可能的列乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44729147/