矩阵与向量相乘得到矩阵

Multiplicating a matrix with a vector results in a matrix

我有一个文档术语矩阵:

document_term_matrix <- as.matrix(DocumentTermMatrix(corpus, control = list(stemming = FALSE, stopwords=FALSE, minWordLength=3, removeNumbers=TRUE, removePunctuation=TRUE )))

对于这个文档术语矩阵,我计算了本地术语和全局术语的权重如下:

lw_tf <- lw_tf(document_term_matrix)
gw_idf <- gw_idf(document_term_matrix)

lw_tf 是与文档术语矩阵 (nxm 具有相同维数的矩阵,并且gw_idf 是大小为 n 的向量。然而,当我 运行:

tf_idf <- lw_tf * gw_idf

tf_idf的维度又是nxm.

最初,我不希望这种乘法有效,因为维度不一致。但是,鉴于此输出,我现在期望 gw_idf 的维数为 mxm。真的是这样吗?如果是这样:大小为 ngw_idf 向量发生了什么?

矩阵乘法在 R 中通过使用 %*% 而不是 * 完成(后者只是逐元素乘法)。您的推理部分正确,您只是使用了错误的符号。

关于矩阵乘法,只有当第一个矩阵的第二个维度与第二个矩阵的第一个维度相同时,矩阵乘法才有可能。结果维度是第一个矩阵的 dim1 乘以第二个矩阵的 dim2。

在您的例子中,您是在告诉我们您有一个 1 x n 矩阵乘以一个 n x m 矩阵,结果应该是一个 1 x m 矩阵。你可以在这个例子中检查这种情况:

a <- matrix(runif(100, 0 , 1), nrow = 1, ncol = 100)
b <- matrix(runif(100 * 200, 0, 1), nrow = 100, ncol = 200)

c <- a %*% b
dim(c)
[1] 1 200

现在,关于你的具体情况,我真的没有这个制作术语文档的包(如果你能提供一个易于重现的例子会很好!),但是如果你乘以 nxm 矩阵元素(你正在使用 *,就像我在开始时说的那样)通过 nx1 数组,结果没有意义。您的变量 gw_idf 根本不是数组(也许它只是一个标量),或者您只是得出了错误的结论。