gpt4 book ai didi

r - 我想应用两个函数,一个是 block 对角线上的函数,另一个是数据框中非对角线元素上的函数

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

df<- data.frame(a=c(1:10), b=c(21:30),c=c(1:10), d=c(14:23),e=c(11:20),f=c(-6:-15),g=c(11:20),h=c(-14:-23),i=c(4:13),j=c(1:10))

在这个数据框中,我有三个块对角矩阵,如下图所示
enter image description here

我想应用两个函数,一个是块对角线的正弦函数,第二个是其他元素的余弦函数并生成相同结构的数据框。
sin(df[1:2,1:2])
sin(df[3:5,3:5])
sin(df[6:10,6:10])
cos(the rest of the elements)

最佳答案

1) 外/算术创建一个逻辑块对角矩阵,指示当前单元格是否在块对角线上,然后使用它来获取 sin 和 cos 值的凸组合,给出一个 data.frame 如下:

v <- rep(1:3, c(2, 3, 5))
ind <- outer(v, v, `==`)
ind * sin(df) + (!ind) * cos(df)

2) ifelse 或者,这会给出一个矩阵结果(或在上面使用 as.matrix)。 ind 来自上面。
m <- as.matrix(df)
ifelse(ind, sin(m), cos(m))

3) 矩阵::bdiag 另一种方法是在 Matrix 包中使用 bdiag(R 附带 - 无需安装它)。
library(Matrix)

ones <- function(n) matrix(1, n, n)
ind <- bdiag(ones(2), ones(3), ones(5)) == 1

现在按照 (1) 或 (2) 的最后一行继续操作。

关于r - 我想应用两个函数,一个是 block 对角线上的函数,另一个是数据框中非对角线元素上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61955016/

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