python - numpy 中所有可能的列乘法?

标签 python numpy

我使用的是 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 是一个向量,表示向量 cicj 的逐元素乘法。

我不想使用 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/

相关文章:

python 3 : Making a str object callable

python - 多处理 Python 中的共享数组

python - Numpy - 将数据分组为总和值

python - 无法按名称访问列数据

python - 用 Python 抓取 Ajax

python - 可视化高维场箭头?

python - 如何在 Excel 文档单元格中查找文本子集的格式

python - 马尔可夫链蒙特卡罗(python,numpy)

python - 如何获得信号最大幅度 10% 时的 (x, y) 坐标?

python - matplotlib - 从 rgba 转换回整数