sách gpt4 ai đã đi

r - Mảng 3D -> áp dụng -> Mảng 3D

In lại 作者:行者123 更新时间:2023-12-02 22:53:46 27 4
mua khóa gpt4 Nike

当仅在一个边距上操作时,áp dụng 似乎不会重新组装 3D 数组。考虑:

 arr <- array(
runif(2*4*3),
dim=c(2, 4, 3),
dimnames=list(a=paste0("a", 1:2), b=paste0("b", 1:4), c=paste0("c", 1:3))
)
# , , c = c1
#
# b
# a b1 b2 b3 b4
# a1 0.7321399 0.8851802 0.2469866 0.9307044
# a2 0.5896138 0.6183046 0.7732842 0.6652637
#
# , , c = c2
# b
# a b1 b2 b3 b4
# a1 0.5894680 0.7839048 0.3854357 0.56555024
# a2 0.6158995 0.6530224 0.8401427 0.04044974
#
# , , c = c3
# b
# a b1 b2 b3 b4
# a1 0.3500653 0.7052743 0.42487635 0.5689287
# a2 0.4097346 0.4527939 0.07192528 0.8638655

现在,创建一个 4 x 4 矩阵来打乱每个 arr[, , i] 中的列,并使用 áp dụng 来矩阵乘以每个 Một arr 中的 *b 子矩阵以重新排序其列。重要的一点是,每次 áp dụng 迭代的结果都是一个矩阵

cols.shuf.mx <- matrix(c(0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0), ncol=4)
apply(arr, 3, `%*%`, cols.shuf.mx)
# c
# c1 c2 c3
# [1,] 0.8851802 0.78390483 0.70527431
# [2,] 0.6183046 0.65302236 0.45279387
# [3,] 0.7321399 0.58946800 0.35006532
# [4,] 0.5896138 0.61589947 0.40973463
# [5,] 0.9307044 0.56555024 0.56892870
# [6,] 0.6652637 0.04044974 0.86386552
# [7,] 0.2469866 0.38543569 0.42487635
# [8,] 0.7732842 0.84014275 0.07192528

然而,我期望的结果是:

# , , c = c1
#
# a 1 2 3 4
# a1 0.8851802 0.7321399 0.9307044 0.2469866
# a2 0.6183046 0.5896138 0.6652637 0.7732842
#
# , , c = c2
#
# a 1 2 3 4
# a1 0.7839048 0.5894680 0.56555024 0.3854357
# a2 0.6530224 0.6158995 0.04044974 0.8401427
#
# , , c = c3
#
# a 1 2 3 4
# a1 0.7052743 0.3500653 0.5689287 0.42487635
# a2 0.4527939 0.4097346 0.8638655 0.07192528

我可以使用 plyr::aaply 获得预期结果:

aperm(aaply(arr, 3, `%*%`, cols.shuf.mx), c(2, 3, 1))

但想知道是否有一个Đơn giản基本方法来实现这个结果(即我是否在这里遗漏了一些明显的东西来获得所需的结果)。

我意识到这里发生的事情就是记录的(如果每次调用 FUN 返回一个长度为 n 的向量,那么 apply 返回一个维度为 c(n, dim(X)[MARGIN]) 的数组,如果 n > 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。

1 Câu trả lời

这是一个不太理想的解决方案,需要预先了解函数结果矩阵的维度:

vapply(
1:dim(arr)[3],
function(x, y) arr[,,x] %*% y,
FUN.VALUE=arr[,,1],
y=cols.shuf.mx
)

关于r - 3D 数组 -> 应用 -> 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21196818/

27 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com