R:如何按列重新缩放我的矩阵

时间:2016-08-16 14:41:05

标签: r matrix matrix-multiplication

我有一个疾病状态矩阵commercialMedExp,其中列是状态(即"没有疾病","疾病","死&#34 ;),行是模型周期(即1,2,3,4等)。

我试图将此乘以成本commercialMedExp * states0CommercialA 的向量,其中每个成本对应于疾病状态。我尝试过以下方法:

softAssert.assertEquals('Expected','Actual',"Failed because Actual did not match expected");

但似乎乘法是跨列而不是跨行进行的。有人可以用正确的语法帮助我吗?

2 个答案:

答案 0 :(得分:2)

列/行重新缩放是矩阵计算中的常见操作。您正在寻找列重新缩放,但我会为两者提供解决方案。

行重新缩放

$stmt = $db->query('SELECT id, par, what, title,  inde 
                    FROM tmatria 
                    ORDER BY inde ASC 
                    where par = ' . $_SESSION["par"] . ';');

列重新缩放

A <- matrix(1:20, nrow = 5); x <- 1:5
## Any method below is much more efficient than `diag(x) %*% A`

## method 1: recycling
A * x

## method 2: `sweep()`
sweep(A, 1L, x, "*")

你能做什么

A <- matrix(1:20, nrow = 5); y <- 1:4
## Any below method is much more efficient than `A %*% diag(y)`

## method 1: transpose + row rescaling
t(y * t(A))

## method 2: `sweep()`
sweep(A, 2L, y, "*")

## method 3: pairwise multiplication
A * rep(y, each = nrow(A))

答案 1 :(得分:0)

这样的东西
commercialMedExp0A <- t(apply(states0CommercialA, 1, function(x){ x * commercialMedExp}))
只要states0CommericialA中的列数与commercialMedExp的列数相同,

就可以正常工作。如果不是,则必须对数据进行子集化。例如,如果疾病状态在第13至18栏中

    commercialMedExp0A <- t(apply(states0CommercialA[,c(13:18)], 1, function(x){ x * commercialMedExp}))