我可以問一個關于快速為 R 中的大 3D 矩陣賦值的愚蠢問題嗎?我有 x, y, z 用于位置索引和 val 用于填充值。for 回圈需要很長時間,您能幫忙嗎?注意這里我只是模擬了 xyz 和 val
x <- replicate(1e4, sample(seq(1:100), size = 1))
y <- replicate(1e4, sample(seq(1:100), size = 1))
z <- replicate(1e4, sample(seq(1:200), size = 1))
val <- rnorm(1e4, 0, 1)
a <- array(numeric(),c(100, 100, 200))
for(ii in seq(from = 1, to = length(x), by = 1)){
a[x[ii], y[ii], z[ii]] <- val[ii]
}
我系結了以下內容mapply,但它回傳給我一個向量
mapply(function(i, j, k, v) a[i, j, k] <- v, x, y , z, val)
uj5u.com熱心網友回復:
你可以做
a[cbind(x, y, z)] <- val
很難證明這在如此大的示例上有效,所以讓我們用 3 x 3 x 3 矩陣在較小的規模上進行演示:
a <- array(numeric(), c(3, 3, 3))
x <- c(3, 2, 1)
y <- c(1, 1, 1)
z <- c(1, 2, 3)
val <- c(1, 2, 3)
所以這些變數意味著我們想要在我們的第一個切片的第一列的第三行有一個 1,在我們的第二個切片的第一列的第二行有一個 2,在我們的第一個切片的第一列的第一行有一個 3第三片:
a[cbind(x, y, z)] <- val
a
#> , , 1
#>
#> [,1] [,2] [,3]
#> [1,] NA NA NA
#> [2,] NA NA NA
#> [3,] 1 NA NA
#>
#> , , 2
#>
#> [,1] [,2] [,3]
#> [1,] NA NA NA
#> [2,] 2 NA NA
#> [3,] NA NA NA
#>
#> , , 3
#>
#> [,1] [,2] [,3]
#> [1,] 3 NA NA
#> [2,] NA NA NA
#> [3,] NA NA NA
由reprex 包于 2022-02-24 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/432689.html
上一篇:UWP:嘗試更改ListView項的背景顏色時出現問題
下一篇:這些渦扇記憶區是什么意思?
