Я хочу иметь матрицу 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.
Этот простой способ умножения матриц очень медленный. Как сделать умножение быстрее в вышеупомянутом специальном случае? Благодарю.
В этом специальном случае вы можете просто написать 'd3 <- d2' – HubertL
можете ли вы сказать больше о фактических ограничениях вашей проблемы? как указывает @HubertL, если 'd1' является идентификационной матрицей, тогда вы закончите. Является ли 'd1' на самом деле диагональной матрицей с элементами, отличными от 1 на диагонали? В этом случае я думаю, что 'sweep (d2, diag (d1), MARGIN = 2, FUN =" * ")' будет работать ... –
@BenBolker. Фактическое ограничение моей проблемы было диагональной матрицей с элементами, отличными от 1. Я исправил этот вопрос в своем вопросе. Спасибо Профессор – Janak