2017-01-30 3 views
0

Что было бы эквивалентной функцией rdivide в R? В моей ситуации у меня есть матрицы, выходящие из числового алгоритма A, B и C. Мне нужно получить x такое, что x = C ./ (AA '). В Matlab я могу сделать это с помощью rdivide. Но мне нужно сделать это в R. Итак, чтобы привести воспроизводимый пример, здесь приведен некоторый код matlab. Обратите внимание, что det (AA ') = 0. Там, где А»транспонирование А.Эквивалентная функция rdivide (matlab) в языке R

% matlab code 
    t=6 
A = raylrnd(0.05,t,1)+0.09; 
B = gallery('randcorr',t); 
C = spdiags(A,0,t,t) * B * spdiags(A,0,t,t); 
x=C ./(A*A') 

#Rcode 
install.packages("Runuran","fifer") 
library("Runuran") 
library("fifer") 
t=6 
A = as.matrix(urrayleigh(t,0.05)+0.09) 
B <- random.correlation (t, ev = runif(t, 0, 1)) 
C= Diagonal(t,A) %*% B %*% Diagonal(t,A) 
+0

Ошибка: 'не может найти функцию "urrayleigh"' –

+0

При редактировании с примерами возможного вклада и желаемый результат (воспроизводимая в оба языка, в идеале), вы с большей вероятностью получите ответ. – alistaire

+0

Только что отредактировал этот вопрос с дополнительной информацией. Я также добавил пакеты R, в которых есть функции, которые я использовал. – user24318

ответ

1

rdivide в matlab эквивалентно разделению элемент-за-элементом двух матриц в R.

Matlab

A = [1:3; 4:6; 7:9] 

# A = 
# 
# 1  2  3 
# 4  5  6 
# 7  8  9 

B = [11:13; 14:16; 17:19] 

# B = 
# 
# 11 12 13 
# 14 15 16 
# 17 18 19 

rdivide(A,B) 

# ans = 
# 
# 0.0909 0.1667 0.2308 
# 0.2857 0.3333 0.3750 
# 0.4118 0.4444 0.4737 

R

A <- t(matrix(1:9, nrow = 3, ncol = 3)) 
B <- t(matrix(11:19, nrow = 3, ncol = 3)) 
A 
#  [,1] [,2] [,3] 
# [1,] 1 2 3 
# [2,] 4 5 6 
# [3,] 7 8 9 

B 
#  [,1] [,2] [,3] 
# [1,] 11 12 13 
# [2,] 14 15 16 
# [3,] 17 18 19 

A/B 

#   [,1]  [,2]  [,3] 
# [1,] 0.09090909 0.1666667 0.2307692 
# [2,] 0.28571429 0.3333333 0.3750000 
# [3,] 0.41176471 0.4444444 0.4736842 
Смежные вопросы