如何在R语言中将数据框转换为矩阵并与它的转置相乘?
嘿,这事儿不难!我给你分R和Python两种最常用的场景来演示,一步步搞定把数据框转成矩阵/数组,再和它的转置做乘法的需求:
在R中实现
- 首先假设你有一个全是定量变量的数据框
df,比如:df <- data.frame(a = c(1,2,3), b = c(4,5,6), c = c(7,8,9)) - 把数据框转成矩阵:直接用
as.matrix()就行,因为都是数值列,转换毫无压力:mat <- as.matrix(df) - 计算矩阵与转置的乘积:用R里专门的矩阵乘法运算符
%*%(别用普通的*,那是逐元素相乘,不是矩阵乘法):# 原矩阵 × 转置矩阵,得到n×n的结果(n是数据框的行数) result <- mat %*% t(mat) # 如果需要转置矩阵 × 原矩阵,得到p×p的结果(p是数据框的列数),就这么写: # result <- t(mat) %*% mat
在Python中实现
这里用pandas处理数据框,numpy做矩阵运算,是最常用的组合:
- 先构造一个示例数据框
df:import pandas as pd df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6], 'c': [7,8,9]}) - 把数据框转成numpy数组(等价于矩阵):推荐用
.to_numpy()方法,比旧版的.values更规范:import numpy as np arr = df.to_numpy() - 计算转置相乘:用
@运算符或者np.dot()都可以,效果一样:# 原数组 × 转置数组 result = arr @ arr.T # 或者用np.dot() result = np.dot(arr, arr.T) # 转置数组 × 原数组的写法: # result = arr.T @ arr
小提醒
- 务必确保你的数据框里全是数值型变量!如果有字符、因子这类非数值列,转换矩阵的时候会报错,记得先把这些列删掉或者转换成数值哦。
- 矩阵乘法有维度要求:原矩阵是n行p列,转置后是p行n列,所以
原×转置得到n×n的矩阵,转置×原得到p×p的矩阵,根据你的需求选就行。
内容的提问来源于stack exchange,提问作者Walid Sharabati
相关产品推荐
相关产品推荐

