查找数组的坐标
Posted
技术标签:
【中文标题】查找数组的坐标【英文标题】:Find coordinates of an array 【发布时间】:2022-01-20 16:23:29 【问题描述】:我有一个三维数组 x 创建为:
vector1 <- c(5, 9, 2)
vector2 <- c(10, 11, 12, 13, 14, 15)
x <- array(c(vector1, vector2), dim = c(3, 3, 2))
print(x)
, , 1
[,1] [,2] [,3]
[1,] 5 10 13
[2,] 9 11 14
[3,] 2 12 15
, , 2
[,1] [,2] [,3]
[1,] 5 10 13
[2,] 9 11 14
[3,] 2 12 15
我需要找到坐标,即数组最小元素的三个维度位置。这就是我所做的:
which.min(x)
[1] 16
x[16]
[1] 2
现在我知道哪个是最小数字,但我如何找到这个数字的坐标(即 [3,1,2])? 我已经试过了
which(x == 2, arr.ind = TRUE)
但输出是这样的:
dim1 dim2 dim3
我怎样才能得到我正在寻找的东西?
【问题讨论】:
请检查数组的值。即如果值为2.000001
,==
将返回 FALSE。该值可能不完全等于 2。尝试使用 which(x == min(x), arr.ind = TRUE)
请发布一个可重现的示例,即我们可以剪切和粘贴以查看您所看到的示例。
我试过了,但它仍然在输出:dim1 dim2 dim3
感谢您在其中编辑代码。当我运行 which(x == min(x), arr.ind = TRUE)
时,我将两个解决方案打印为两行矩阵:[1,] 3 1 1
和 [2,] 3 1 2
。
嗨,你说得对。我的数组和这个不一样。我只是使用了这个,因为它更容易理解,但我的一定有问题。谢谢!
【参考方案1】:
我认为您误解了输出。 “dim1 dim2 dim3”不是结果。它们只是结果的列名,实际上是 2 x 3 数字矩阵。
which(x == 2, arr.ind = TRUE)
# dim1 dim2 dim3
#[1,] 3 1 1
#[2,] 3 1 2
它告诉您该数组中有两个 2,因为有两行以索引值作为结果。如果您想要 c(3,1,2) 的结果,它将是第二行:
arr <- which(x == 2, arr.ind = TRUE)
unname(arr[2, ]) # to remove the names that were confusing you.
#[1] 3 1 2
由于您的 cmets 建议您可能存在浮点问题,因此我将通过修改您的示例来创建一个示例,以便您可以看到 R 仅显示度量和数组元素的有限精度,这可能会立即隐藏非常小的差异观看。
x[3] <- 2.000000001 # small increment
> x
, , 1
[,1] [,2] [,3]
[1,] 5 10 13
[2,] 9 11 14
[3,] 2 12 15
, , 2
[,1] [,2] [,3]
[1,] 5 10 13
[2,] 9 11 14
[3,] 2 12 15
> which.min(x)
[1] 12 twelfth item now the min
> which(x == min(x), arr.ind=TRUE)
dim1 dim2 dim3
[1,] 3 1 2 # the array index for the 12th item
【讨论】:
以上是关于查找数组的坐标的主要内容,如果未能解决你的问题,请参考以下文章