簡體   English   中英

帶有數字向量(不是矩陣向量)的 MVM 以及如何避免雙重轉置?

[英]MVM with a numeric vector (not a matrix vector) and how to avoid double transposition?

我有以下簡化案例,它實際上是一個更大的性能熱點:

epsilon <- c(-3, -4)
str(epsilon)
num [1:2] -3 -4

Q <- matrix(c(2, 1, 0, 3, 1, 0), nrow=3, ncol=2)
str(Q)
num [1:3, 1:2] 2 1 0 3 1 0
Q
     [,1] [,2]
[1,]    2    3
[2,]    1    1
[3,]    0    0

這是我需要的正確結果,但它需要雙轉位,即對於大 Q 來說很昂貴:

t(epsilon*t(Q))
     [,1] [,2]
[1,]   -6  -12
[2,]   -3   -4
[3,]    0    0

但是,如果我只是執行以下操作,則會得到不同的結果(即第二行被翻轉):

Q*epsilon
     [,1] [,2]
[1,]   -6  -12
[2,]   -4   -3
[3,]    0    0

從數學上講(epsilon*Q^T)^T應該與Q*epsilon^T相同,但這不是我想要的(做Q%*%epsilon它會產生 3x1 結果)。

有沒有辦法在不雙重轉置可能非常大的 Q 的情況下實現這一目標?

這將是容易rep licate與任一col提供的“Q”的列的索引,使得兩個元件是相同的長度的

Q * epsilon[col(Q)]

或者使用rep

Q * rep(epsilon, each = nrow(Q))

或者用sweep

sweep(Q, 2, epsilon, `*`)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM