R中矩阵乘法的无空值计数操作

时间:2019-04-12 15:34:29

标签: r matrix vector multiplication

我有一个向量a和一个矩阵A

a = c(2,5,6)
b=cbind(c(2,7,0),c(3,0,11),c(99,0,0))
A = as.matrix(b)

我想在矩阵A上乘以一个结果向量,该向量计算没有空值的操作数。对于这个例子,答案应该是:

2*2+5*7+6*0  (there are two operations without 0.So the answer is 2)
2*3+5*0+6*11 (there are two operations without 0.So the answer is 2)
2*99+5*0+6*0 (there is  one operation  without 0.So the answer is 1)
THe answer should be (2,2,1)

我应该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作

<input type="hidden" name="tx_indexedsearch[_sections]" value="###SECTIONS###">

答案 1 :(得分:0)

我们将'A'与'a'相乘,通过比较值是否不等于0并将其转换为逻辑matrix并获得逻辑列的列总和

colSums((A * a) != 0)
#[1] 2 2 1

请注意

A * a
#    [,1] [,2] [,3]
#[1,]    4    6  198
#[2,]   35    0    0
#[3,]    0   66    0

t(A) * a
#    [,1] [,2] [,3]
#[1,]    4   14    0
#[2,]   15    0   55
#[3,]  594    0    0

OP帖子中的值

2*2+5*7+6*0 

A * a

匹配

根据示例,因为'a'中没有零元素

colSums(A != 0)
#[1] 2 2 1

或使用apply

apply(A, 2, FUN = function(x) sum((x * a) != 0))
#[1] 2 2 1

答案 2 :(得分:0)

非常感谢您的回答。 我试图使用vector也使用null:

d= c(0,2,4,6)
b=cbind(c(2,7,0,7),c(3,0,11,9),c(99,0,0,2),c(9,0,0,2)) 
B= as.matrix(b)

然后我将向量d多重化到矩阵B

d * B

        [,1] [,2] [,3] [,4]
  [1,]    0    0    0    0
  [2,]   14    0    0    0
  [3,]    0   44    0    0
  [4,]   42   54   12   12

最后一个是求和而不是0的列数:

colSums((d*B)  !=0)

利润! 最终代码是:

d= c(0,2,4,6)
b=cbind(c(2,7,0,7),c(3,0,11,9),c(99,0,0,2),c(9,0,0,2)) 
B= as.matrix(b)
colSums((d*B)  !=0)