如何对列的成对点积进行求和

时间:2016-06-08 01:06:09

标签: python numpy pandas

我有一个数据框

df = pd.DataFrame(np.random.rand(10, 10))

我想用偶数列取奇数列的成对点积然后求它们。所以第0列为第1列,第2列为第3列,依此类推。

我已经完成了

df.mul(df.shift(axis=1)).sum().sum()

但这会让我得到第1栏和第2栏,第2栏和第3册,第3册和第4栏,这不是我想要的。

2 个答案:

答案 0 :(得分:2)

元素乘法和总和减少可以被认为是点积减少。在这种情况下,我们可以使用NumPy's tensordot来完成,就像这样 -

# Extract the elements as a NumPy array
arr = df.get_values()

# Perform dot product between odd and even columns to get the desired output
out = np.tensordot(arr[:,::2],arr[:,1::2])

答案 1 :(得分:1)

尝试:

(df.iloc[:, ::2].values * df.iloc[:, 1::2].values).sum()