gpt4 book ai didi

r - 将函数(分位数)应用于矩阵行并使用结​​果修改行

转载 作者:行者123 更新时间:2023-12-04 12:46:19 24 4
gpt4 key购买 nike

我有一个矩阵 A,其中填充了形状为 10x10 的随机值。如何在每一行上执行一个函数(找到第 75 个分位数),并将 A 的那一行中的每个元素除以该结果?

在下面的尝试中,我得到了一个 q 值,但 q 应该至少有 10 个值(每行一个)。那时我应该能够用 A/q 进行逐元素除法。 .我究竟做错了什么?

A <- matrix(rnorm(10 * 10), 10, 10)
q <- c(quantile(A[1,], 0.75))
A/q

最佳答案

rowQuantiles来自 matrixStats包裹:

library(matrixStats)
res <- A / rowQuantiles(A, probs=0.75)

结果一样吗?
identical(apply(A, 1, quantile, probs=0.75), rowQuantiles(A, probs=0.75))
[1] TRUE

它更快吗?
library(microbenchmark)

microbenchmark(apply=apply(A, 1, quantile, probs=0.75),
matStat=rowQuantiles(A, probs=0.75))
Unit: microseconds
expr min lq mean median uq max neval cld
apply 788.298 808.9675 959.816 829.3515 855.154 13259.652 100 b
matStat 246.611 267.2800 278.302 276.1180 284.386 362.075 100 a

在这个矩阵上,肯定的。

在更大的矩阵 (1000 X 1000) 上呢?
A <- matrix(rnorm(1e6), 1000, 1000)

microbenchmark(apply=apply(A, 1, quantile, probs=0.75),
matStat=rowQuantiles(A, probs=0.75))
Unit: milliseconds
expr min lq mean median uq max neval cld
apply 115.57328 123.4831 183.1455 139.82021 308.3715 353.1725 100 b
matStat 74.22657 89.2162 136.1508 95.41482 113.0969 745.1526 100 a

没有那么戏剧化,但仍然是(忽略最大值)。

关于r - 将函数(分位数)应用于矩阵行并使用结​​果修改行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46717477/

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