我有一个4x100矩阵,我想在其转置等中将第1列与第1行相乘,并将这些矩阵存储在某处,以便能够获取这些新矩阵的总和 .
我真的不知道从哪里开始,因为我在列 - 行 - 乘法后获得了4x4矩阵 . 由于这个事实,我无法将它们存储在矩阵中
数据:
mm num[1:4,1:100]
mm_t num[1:100,1:4]
我正在考虑以某种方式创建一个列表
list1=list()
for(i in 1:100){
list1[i] <- mm[,i]%*%mm_t[i,]
}
但我觉得我需要更多的指数,因为这只会让我在每个参数中留下一个数字 .
2 回答
让我们从一些示例数据开始 . 请养成在你的问题中包含这样的事情的习惯:
这是一个有效的答案,与您的尝试非常相似:
至于为什么你的工作不起作用,我们可以试验看看确实我们得到的是数字而不是矩阵 . 原因是当您对矩阵的单个行或列进行子集化时,维度将被“删除”并且它将被强制转换为普通向量 . 当你矩阵乘以两个向量时,你得到它们的点积 .
我们可以通过在子集代码中指定
drop = FALSE
来避免这种情况因此稍微修改您的尝试,只需添加
drop = FALSE
将使其工作 .首先,您的数据调用尚不清楚 . 其次,您是尝试将每个值相乘,还是进行矩阵乘法
我们创建了一个4x100矩阵及其转置:
然后我们可以进行矩阵乘法(这就是你所做的,你从矩阵乘法的定义得到一个4 x 4矩阵https://www.wikiwand.com/en/Matrix_multiplication)
如果我们想要将每个索引乘以它自己(因此mm [1,1]乘以mm [1,1]),那么:
这将产生4x100矩阵,其中每个值是原始值的平方 .
如果我们想要每列的矩阵乘法,那么:
这导致100个值:每个值是4x1向量与其自身的矩阵乘积 .