Rの中に同心円の数が増える行列を作る関数を書く必要があります。この関数の引数は、いくつかのレイヤーです。たとえば、x = 3の場合、行列は次のようになります。数値の同心円環が増加する行列を作成するR
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
どのようにすればいいのかわかりません。私は本当に何か提案を感謝します。
Rの中に同心円の数が増える行列を作る関数を書く必要があります。この関数の引数は、いくつかのレイヤーです。たとえば、x = 3の場合、行列は次のようになります。数値の同心円環が増加する行列を作成するR
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
どのようにすればいいのかわかりません。私は本当に何か提案を感謝します。
これを試してください:
x<-3
res<-matrix(nrow=2*x-1,ncol=2*x-1)
for (i in 1:x) res[i:(2*x-i),i:(2*x-i)]<-i
res
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1 1 1 1 1
#[2,] 1 2 2 2 1
#[3,] 1 2 3 2 1
#[4,] 1 2 2 2 1
#[5,] 1 1 1 1 1
1)これを試してください:
x <- 3 # input
n <- 2*x-1
m <- diag(n)
x - pmax(abs(row(m) - x), abs(col(m) - x))
寄付:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 1 2 2 2 1
[3,] 1 2 3 2 1
[4,] 1 2 2 2 1
[5,] 1 1 1 1 1
2)第二のアプローチである。
x <- 3 # input
n <- 2*x-1
mid <- pmin(1:n, n:1) # middle row/column
outer(mid, mid, pmin)
と同じ結果が得られます。
3)まだ前の二つのアプローチにいくつかの類似点を有する別のアプローチがある:
x <- 3 # input
n <- 2*x-1
Dist <- abs(seq_len(n) - x)
x - outer(Dist, Dist, pmax)
注:上記の問題に示すサンプルマトリックスを与えるが、問題の主題は言いますリングが増加して中央から外側に向かっていることを意味するので、もし望むならそれを試してみてください。m
、mid
およびDist
は以前と同じです:
pmax(abs(row(m) - x), abs(col(m) - x)) + 1
又は
x - outer(mid, mid, pmin) + 1
又は
outer(Dist, Dist, pmax) + 1
これらのいずれも与える:
[,1] [,2] [,3] [,4] [,5]
[1,] 3 3 3 3 3
[2,] 3 2 2 2 3
[3,] 3 2 1 2 3
[4,] 3 2 2 2 3
[5,] 3 3 3 3 3
キック用の再帰溶液(奇数Nのみ)
f <- function(n) if (n == 1) 1 else `[<-`(matrix(1,n,n), 2:(n-1), 2:(n-1), 1+Recall(n-2))
f(5)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 1 1 1 1
# [2,] 1 2 2 2 1
# [3,] 1 2 3 2 1
# [4,] 1 2 2 2 1
# [5,] 1 1 1 1 1
ここLogicの、(ゼロでそれを埋めるとからアレイを横断開始2 * X-1及び に等しい行と列の数とマトリックスを作成