gpt4 book ai didi

r - R 中的 hdf5 文件,用于通过 ID 进行快速随机访问

转载 作者:行者123 更新时间:2023-12-01 01:03:12 25 4
gpt4 key购买 nike

假设我想将一个大维度的矩阵存储为 HDF5 文件,然后我只想按 ID 读取矩阵的一些切片(ID 是指矩阵的行名称,在我的情况下是唯一的,因此它们可以作为身份证)。是否有使用 HDF5 文件的快速方法?

例子。

my.mat = matrix(rnorm(400,2,1), nrow=100, ncol=4)
rownames(my.mat) = paste("id", c(1:100), sep="")

然后,我会做这样的事情:
h5createFile("test.h5")
h5createDataset(file="test.h5", dataset="dat", dim=c(100,4), not sure what goes here)

然后我想读取 h5 文件,但只能按行 ID 切片,即只读取行,
rows.to.read= c("id4", "id10", "id40")

主要目标是尽可能快地进行切片读取(切片读取是指通过 ID 读取)和整个 HDF5 文件的写入,因为这些都是非常大的数据集。我想人们必须以通过 row_name 对它们进行散列的方式存储它们,以便通过 ID 检索可以快速进行,而无需对整个文档进行排序和/或扫描。

最佳答案

你可以试试 h5r 包,它的 API 比 rhdf5 包轻一点,但功能不全。

require(h5r)
my.mat = matrix(rnorm(400,2,1), nrow=100, ncol=4)
rnames = paste("id", c(1:100), sep="")

f = H5File("mymat.h5", 'w')
d = createH5Dataset(f, "mymat", my.mat)
r = createH5Dataset(f, "rnames", rnames)

然后按整数/序列切片/索引是预期的(并非全部读入内存)
d[1:2,1:2]
[,1] [,2]
[1,] 2.777984 1.6040137
[2,] 3.406609 -0.5168481

目前,您必须使用行名跳过一个箍,因为 hdf5 数据结构都是一种类型(忽略更复杂的 hdf5 类型)
d[match(rows.to.read, r[]),]

免责声明:我是 h5r 包的作者。

关于r - R 中的 hdf5 文件,用于通过 ID 进行快速随机访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21168280/

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