2017-11-21 8 views
2

私はこのタイプの行列をどのように時間を節約して構築するのかという疑問があります。タスクは、ユーザーが自然数(n = 1,2,3,4,5 ...)を入力し、Rがそのようなタイプのマトリックス(n = 4のマトリックスのタイプの下)を印刷する必要があるということです。私は、第1列と第2列が第6列と第7列に対称であることを観察し、第1列と第2列を正しく印刷するだけで十分です。また、第3列は、この列の1 + 1 + 1 = 3に対応する第2列+ c(0,0,1,1,1,0,0)として取得されることがわかりました。しかし、私は理解していない、一般的な場合のこの行列のアルゴリズムは何ですか(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 

答えて

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) 
+0

ありがとうございました!今私はこの機能の仕組みを理解しています! –

+0

喜んで助けてください。毎日使用すると、「外側」は生活の質を向上させます。 – CPak