gpt4 book ai didi

r - 如何使用列主序将向量中的值插入矩阵?

转载 作者:行者123 更新时间:2023-12-04 10:07:16 25 4
gpt4 key购买 nike

我想将一组表示为向量的 n 值插入到矩阵中相应的一组位置中。实际应用程序涉及将一组 n 海面温度值插入到一个区域的图像中,该区域表示为具有维度 nrow x ncol > n 的网格,我已经确定了应该接收温度值的 n 个水像素.我遇到的问题是温度值的排序就像它们来自列主矩阵而不是用于索引 R 网格的行主排序。

这是我的意思的玩具示例。

> grid <- matrix(0,4,4)
> grid # define the base grid
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
[4,] 0 0 0 0

> temps <- c(9,9,9,9,9) # we have 5 temperature values
> locs <- c(2,3,4,6,7) # locations in the base grid that are water

> grid[locs] <- temps # not really what I want - substitution in row-major order
> grid
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 9 9 0 0
[3,] 9 9 0 0
[4,] 9 0 0 0

想要的结果是:
     [,1] [,2] [,3] [,4]
[1,] 0 9 9 9
[2,] 0 9 9 0
[3,] 0 0 0 0
[4,] 0 0 0 0

我想我可以玩转网格,进行替换然后将其转回,但我认为会有更好的方法来解决这个问题。

最佳答案

这里有几个选项,每个选项都适用于任意维度的矩阵:

arrayIndByRow <- function(ind, dim) {
arrayInd(ind, rev(dim))[,2:1]
}

grid[arrayIndByRow(locs, dim(grid))] <- temps
grid
# [,1] [,2] [,3] [,4]
# [1,] 0 9 9 9
# [2,] 0 9 9 0
# [3,] 0 0 0 0
# [4,] 0 0 0 0
f <- function(ind, dim) {
nr <- dim[1]
nc <- dim[2]
ii <- ind - 1
((ii %/% nc) + 1) + nr*(ii %% nc)
}

grid[f(locs, dim(grid))] <- 1:5
grid
# [,1] [,2] [,3] [,4]
# [1,] 0 1 2 3
# [2,] 0 4 5 0
# [3,] 0 0 0 0
# [4,] 0 0 0 0

关于r - 如何使用列主序将向量中的值插入矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26767508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com