R умножить матрицы: но со специальной функцией

У меня есть две квадратные матрицы A и B. Обе имеют 1 или 0 в каждой из своих записей. Пример показан ниже

A
channel
 id a b c
  1 1 1 1
  2 1 0 1
  3 1 0 0

B
       id
channel 1 2 3
  a     1 1 1
  b     1 0 0
  c     1 1 0

Я хочу умножить их. Однако в то время, когда вычисляется каждый элемент A%*%B, мне не нужна сумма, вместо этого я хочу ИЛИ каждый элемент, а затем взять полученную сумму. Например, чтобы вычислить элемент в строке = 2 и столбце = 3, типичное матричное умножение будет делать (1 * 1 + 0 * 1 + 0 * 0) = 1, вместо этого я хочу сделать (1 | 1) + (0 |1) + (0|0) = 2. Как мне это сделать? подать заявление? плир? большое спасибо заранее.


person broccoli    schedule 06.08.2013    source источник
comment
пожалуйста, объясните, как вы получаете (1 | 1) + (0 | 1) + (0 | 0) = 2   -  person Metrics    schedule 06.08.2013
comment
Вы можете сказать, как 0 ИЛИ 1 = 0? Любая логика?   -  person Metrics    schedule 06.08.2013
comment
@Metrics: брокколи не сказал 0 ИЛИ 1 = 0. Он сказал 0 ИЛИ 1 = 1.   -  person IRTFM    schedule 06.08.2013


Ответы (1)


 A <-scan()
1:   1 1 1
4:   1 0 1
7:   1 0 0
10: 
Read 9 items
 B<-scan()
1:        1 1 1
4:        1 0 0
7:        1 1 0
10: 
Read 9 items

 A<-matrix(A, 3, byrow=TRUE)
 B<-matrix(B, 3, byrow=TRUE)

Логическое ИЛИ с 0/1 аналогично pmax:

pm <-  function(x,y) sum(pmax(A[x,],B[,y])) 
outer(1:3, 1:3, Vectorize(pm) )

     [,1] [,2] [,3]
[1,]    3    3    3
[2,]    3    2    2
[3,]    3    2    1
person IRTFM    schedule 06.08.2013
comment
Любопытно, а зачем использовать pmax, а не просто |? - person Hong Ooi; 06.08.2013
comment
Возможно, я ошибся, но sum(x|y) не удалось, когда я пытался это сделать. - person IRTFM; 06.08.2013
comment
Я сделал ошибку: использование sum(A[x,] | B[,y]) работает так же, как и метод pmax. - person IRTFM; 06.08.2013