从Excel导入矩阵后,如何实现最后一行与对角矩阵的非内积乘法?
问题根源
从Excel导入的矩阵最后一行,本质是1行n列的矩阵类型,而非R中的一维向量。R对矩阵和向量的乘法逻辑存在差异:
- 1×n矩阵与n×n对角矩阵做元素级乘法(
*)时,结果仍为1×n矩阵; - 一维向量与对角矩阵做元素级乘法时,R会自动将向量广播至与对角矩阵匹配的维度,最终得到n×n的对角矩阵(每个对角元素为向量对应元素与原对角矩阵对角元素的乘积)。
解决代码
只需将导入的矩阵最后一行转换为一维向量,再与对角矩阵相乘即可:
# 假设导入的矩阵名为excel_mat,对角矩阵为diag_matrix # 提取最后一行并转为一维向量 last_row <- as.vector(excel_mat[nrow(excel_mat), ]) # 执行元素级乘法,得到同维度的对角矩阵 result_matrix <- diag_matrix * last_row
也可以用你试过的c()函数直接转换,效果完全一致:
last_row <- c(excel_mat[nrow(excel_mat), ]) result_matrix <- diag_matrix * last_row
测试示例
# 模拟从Excel导入的1行矩阵 imported_row_matrix <- matrix(c(1, 2, 3), nrow = 1) # 构造3×3对角矩阵 test_diag <- diag(c(4, 5, 6)) # 直接用矩阵相乘,输出1×3结果 imported_row_matrix * test_diag # 转成向量后相乘,输出3×3对角矩阵 as.vector(imported_row_matrix) * test_diag
内容的提问来源于stack exchange,提问作者Juan Carlos Guevara
相关产品推荐
相关产品推荐

