假设我有以下数据帧:
index K1 K2 D1 D2 D3
N1 0 1 12 4 6
N2 1 1 10 2 7
N3 0 0 3 5 8
基本上,我想将此数据帧转换为以下内容:
index COL1 COL2
K1 D1 = 0*12+1*10+0*3
K1 D2 = 0*4+1*2+0*5
K1 D3 = 0*6+1*7+0*8
K2 D1 = 1*12+1*10+0*3
K2 D2 = 1*4+1*2+0*5
K2 D3 = 1*6+1*7+0*8
COL2
的内容基本上是index
中的向量和COL1
中的向量之间的点积(也称为标量积)。例如,让我们以结果df的第一行为例。在index
下,我们有K1
,在COL1
下,我们有D1
。查看第一个表,我们知道K1 = [0,1,0]
和D1 = [12,10,3]
。这两个“向量”的标量积是COL2
(第一行)内的值
我正试图找到一种不使用嵌套循环的方法来实现这一点(因为这样做的目的是使某些东西更高效),但是,我不知道如何实现。我试着使用pd.melt()
函数,虽然它让我更接近我想要的,但它并不能让我达到我想要的地方。你能给我一个提示吗
根据@QuangHoang的答案,您可以看到numpy
.dot
矩阵乘法版本是否有更高的性能。由于.to_numpy()
只是创建了一个与K
和D
索引无关的数字矩阵,因此除了纯数字之外,还必须进行一些操作,以使其恢复到所需的格式:其他
numpy
数组选项:更多信息(numpy matrix vector multiplication)
这是矩阵乘法:
输出:
相关问题 更多 >
编程相关推荐