2016-10-18 3 views
0

Я хочу иметь матрицу d3 (m x n), каждая строка которой одинакова и равна заданному вектору (d0) с размерностью n.r: как сделать умножение матрицы быстрее (специальный случай)

Моя попытка была следующая: Пусть

m=1000 
n=20000 
d0=runif(n) 
d1=diag(d0) 
d2=array(1,dim=c(m,n)). 

Я хотел бы, чтобы вычислить произведение выше две матрицы, d3, где

d3=d2%*%d1. 

Этот простой способ умножения матриц очень медленный. Как сделать умножение быстрее в вышеупомянутом специальном случае? Благодарю.

+2

В этом специальном случае вы можете просто написать 'd3 <- d2' – HubertL

+1

можете ли вы сказать больше о фактических ограничениях вашей проблемы? как указывает @HubertL, если 'd1' является идентификационной матрицей, тогда вы закончите. Является ли 'd1' на самом деле диагональной матрицей с элементами, отличными от 1 на диагонали? В этом случае я думаю, что 'sweep (d2, diag (d1), MARGIN = 2, FUN =" * ")' будет работать ... –

+0

@BenBolker. Фактическое ограничение моей проблемы было диагональной матрицей с элементами, отличными от 1. Я исправил этот вопрос в своем вопросе. Спасибо Профессор – Janak

ответ

2

Я хочу иметь матрицу d3 (м х п) которого каждая строка одинакова и равно заданному вектору (d0) с размерности п.

Это тривиально, используя функцию matrix и переработку вектора.

m=4 
n=5 
set.seed(42) 
d0=runif(n) 
matrix(d0, nrow = m, ncol = n, byrow = TRUE) 
#   [,1]  [,2]  [,3]  [,4]  [,5] 
#[1,] 0.914806 0.9370754 0.2861395 0.8304476 0.6417455 
#[2,] 0.914806 0.9370754 0.2861395 0.8304476 0.6417455 
#[3,] 0.914806 0.9370754 0.2861395 0.8304476 0.6417455 
#[4,] 0.914806 0.9370754 0.2861395 0.8304476 0.6417455 

Это должно быть самое быстрое решение.

+0

Я пропустил тривиальный трюк. Это голодный. Спасибо за ответ. – Janak

Смежные вопросы