2017-06-27 61 views
0

我試圖乘以2x2矩陣與1x2矩陣。R:不一致的參數

class(logP) 
# "array" 
dim(logP) 
# 2 2 1 
class(theta[,t-1,1]) 
# "numeric" 
dim(theta[,t-1,1]) 
# NULL 
length(theta[,t-1,1]) 
# 2 
logP%*%theta[,t-1,1] 
# Error in logP %*% theta[, t - 1, 1] : non-conformable arguments  

logP是2x2的同時theta[,t-1,1]是2×1。我應該如何進行矩陣乘法?

+3

請檢查[問]和[mcve] –

+0

不,dim [theta [,t-1,1])'爲NULL。你失去了維度。你需要使用drop = FALSE。查看'dim(theta [,t-1,1,drop = FALSE])'來進行比較,然後轉到'?「[」'以改善您對控制它們的最重要的功能行爲和參數的瞭解。 –

回答

0

主要問題是logP是2X2X1數組。您應該使用drop將其轉換爲矩陣。

這是一個複製您的問題的可重複的例子。

# the identity matrix stored as a 2X2X1 array 
logP <- array(c(1, 0, 0, 1), c(2,2,1)) 
# some vector 
theta <- 1:2 

檢查的對象爲在崗

dim(logP) 
[1] 2 2 1 
dim(theta) 
NULL 

確保我們正確地設置單位矩陣

logP 
, , 1 

    [,1] [,2] 
[1,] 1 0 
[2,] 0 1 

現在,試着乘

logP %*% theta 

錯誤的logP%*%THETA:非順應性參數

由於第三維是1,我們可以擺脫它使用drop的。

drop(logP) %*% theta 
    [,1] 
[1,] 1 
[2,] 2 

它返回我們期望的一個2X1矩陣的θ值。