【问题标题】:R - Converting a multidimensional array to vector and back to multidimensional arrayR - 将多维数组转换为向量并返回多维数组
【发布时间】:2020-01-11 10:55:16
【问题描述】:

我有一个 R 数组 start_arrdimensions i x j x k 分别代表行数、列数和深度。每个维度都被命名。我可以将此数组转换为(一维)向量intermediate_vec。然后我需要将此一维向量转换回原始的i x j x k 数组end_arr。我只是在寻找通用函数array2vecvec2array 来进行转换,以保留从数组到向量再到数组时元素的排列方式(即1,1,1 处的元素转到向量元素 1 并返回到数组元素 1,1,1;1,2,1 处的元素转到向量元素 2 并返回到数组元素 1,2,1 等)。元素在intermediate_vec 中的特定放置方式并不重要,只要它们在end_arr 中与start_arr 中的位置完全相同即可。

我可以使用类似 C 的迭代语法来做到这一点,但我确信在 R 中有一些更快的声明方式。

【问题讨论】:

    标签: r arrays multidimensional-array vector


    【解决方案1】:

    1) 假设我们有数组arr,如第一行所示。然后用c转换成向量vec,进行每个元素加100的变换。然后用相同的名称重新整形,给出arr2

    arr <- array(1:24, 2:4, dimnames = list(letters[1:2], LETTERS[1:3], month.abb[1:4]))
    vec <- c(arr)
    arr2 <- replace(arr, TRUE, vec + 100)
    
    # check 
    all(arr2 - arr == 100)
    ## [1] TRUE
    

    2) 这也可以:

    arr2a <- array(vec + 100, dim(arr), dimnames = dimnames(arr))
    
    identical(arr2, arr2a)
    ## [1] TRUE
    

    【讨论】:

    • c(arr) 是否具有确定性,因为它具有将arr 的元素转换为向量中元素的固定方式(例如逐行等)?
    • 是的,它是逆里程表顺序,即最左边的索引变化最快。如果arr 是一个矩阵,表示逐列。
    猜你喜欢
    • 2021-05-11
    • 2023-03-26
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多