Python 如何求列的成对点积和

Python 如何求列的成对点积和,python,numpy,pandas,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列,这不是我想要的。试试: (df.iloc[:, ::2].values * df.iloc[:, 1::2].values).sum() 元素级乘法和求和归约可以看作

我有一个数据帧

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列,这不是我想要的。

试试:

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

元素级乘法和求和归约可以看作是点积归约。在这种情况下,我们可以这样做-

# 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])