外部结构矩阵

时间:2017-11-21 12:14:44

标签: r matrix

我有一个问题,如何构建这种类型的矩阵,节省更多时间。任务是用户输入自然数(n = 1,2,3,4,5 ......)并且R必须打印这种类型的矩阵(在n = 4的矩阵类型下面)。我观察到第一列和第二列与第6列和第7列对称,并且足以正确打印左侧的第一列和第二列。我还观察到第3列是第二列+ c(0,0,1,1,1,0,0),对应1 + 1 + 1 = 3 - 该列的数量。但是我不明白,对于一般情况,这个矩阵的算法是什么(对于n = 6的fe,dim是2n-1 x 2n-1(nrow x ncol)。它是构造的最容易的变体吗?这个矩阵列或函数外部允许简化该任务吗?

1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1

1 个答案:

答案 0 :(得分:5)

是的,outer可以让这更容易。结合pmin,它可以为您提供您正在寻找的行为

n <- 4

series <- c(seq_len(n-1), n, rev(seq_len(n-1)))
# [1] 1 2 3 4 3 2 1

outer(series, series, pmin)
     # [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,]    1    1    1    1    1    1    1
# [2,]    1    2    2    2    2    2    1
# [3,]    1    2    3    3    3    2    1
# [4,]    1    2    3    4    3    2    1
# [5,]    1    2    3    3    3    2    1
# [6,]    1    2    2    2    2    2    1
# [7,]    1    1    1    1    1    1    1

这是一个功能

myfun <- function(n) {
                series <- c(seq_len(n-1), n, rev(seq_len(n-1)))
                return(outer(series, series, pmin))
            }
myfun(4)