рандомизированное поэлементное умножение в R

Я копался на сайте в поисках ответа на свой вопрос, и я новичок в R, поэтому я надеюсь, что это вообще возможно. У меня есть две большие матрицы симуляций (A = 100 000 x 50 и B = 10 000 x 50), которые я хотел бы случайным образом умножить по элементам на строку.

По сути, я хотел бы, чтобы каждая строка в A случайным образом выбирала строку из B для поэлементного умножения.

A:

      [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    1    1    1    1    1
[3,]    1    1    1    1    1
[4,]    1    1    1    1    1
[5,]    1    1    1    1    1
[6,]    1    1    1    1    1
[7,]    1    1    1    1    1
[8,]    1    1    1    1    1
[9,]    1    1    1    1    1
[10,]   1    1    1    1    1

И Б:

      [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    2    2    2    2    2
[3,]    3    3    3    3    3
[4,]    4    4    4    4    4
[5,]    5    5    5    5    5

Есть ли оператор, который мог бы проходить по строкам A и случайным образом выбирать строку из B в пару для поэлементного умножения? Для результатов примерно так:

 C <- A&*&B
 C
 A[1,]*B[3,]
 A[2,]*B[1,]
 A[3,]*B[2,]  
 A[4,]*B[5,] 
 A[5,]*B[3,]  
 A[6,]*B[4,] 
 A[7,]*B[1,]  
 A[8,]*B[5,] 
 A[9,]*B[2,] 
 A[10,]*B[2,]

Спасибо!


person Shmoose    schedule 23.06.2016    source источник


Ответы (1)


Попробуй это:

row_id <- sample(1:nrow(B), nrow(A), replace = TRUE)
A * B[row_id, ]

Я думаю, мне нужно только объяснить, что делает sample(). Рассмотреть возможность:

sample(1:5, 10, replace = TRUE)
[1] 4 5 2 4 1 2 2 1 2 5

Я не устанавливал случайное семя по set.seed(), поэтому при его запуске вы получите другой результат. Но все, что вам нужно знать, это то, что это случайно.

person Zheyuan Li    schedule 23.06.2016