gpt4 book ai didi

r - 是时候从矩阵对象中获取元素了

转载 作者:行者123 更新时间:2023-12-04 09:17:15 25 4
gpt4 key购买 nike

与此类似 question我运行了一个微基准测试来从一个大矩阵中读取一个元素。我很惊讶地看到使用行名称时性能下降了多少:

m = matrix(1, nrow=1000000, ncol=10)
rownames(m) = as.character(1:1000000)
microbenchmark(m["3450", 1], m[3450, 1], times=1000)
Unit: microseconds
expr min lq median uq max neval
m["3450", 1] 176465.55 183443.369 185321.5540 185982.0840 522346.477 1000
m[3450, 1] 3.19 3.445 10.7155 14.1545 29.897 1000

我绝对需要使用行名来读取我的矩阵元素。我怎样才能提高性能?

更新

我添加了 Geoffrey answer 和 subset() 的基准测试结果。我不知道为什么但 subset() 具有更好的只读性能([[]] 允许赋值,subset() 不允许):
 microbenchmark(m["3450", 1], m[["3450", 1]], m[3450, 1], .subset(m, 1)["3450"], .subset(m, 1)[3450], times=1000)
Unit: microseconds
expr min lq median uq max neval
m["3450", 1] 176667.252 180197.435 181969.2900 185090.9155 254075.814 1000
m[["3450", 1]] 144.732 145.341 151.1440 191.9960 1096.183 1000
m[3450, 1] 2.900 3.290 4.4400 6.5025 22.391 1000
.subset(m, 1)["3450"] 2.704 3.140 4.1285 14.8740 43.134 1000
.subset(m, 1)[3450] 2.460 2.815 3.2680 13.0300 38.105 1000

最佳答案

您可以使用 m[["3450, 1]]。'[[' 运算符只选择一个元素(我相信第一个),然后返回它。'[' 用于选择多个元素。理想情况下你首先不会将字符作为行名......

microbenchmark(m["3450", 1], m[["3450", 1]],m[3450, 1], times=1000)
Unit: nanoseconds
expr min lq median uq max neval
m["3450", 1] 74898303 76755304 78038970 87569666 231740997 1000
m[["3450", 1]] 30790 32657 48673 55671 241340 1000
m[3450, 1] 623 1245 2800 6532 26125 1000

关于r - 是时候从矩阵对象中获取元素了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17043440/

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