我有一个向量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)
我应该如何解决这个问题?
答案 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)