gpt4 book ai didi

r - 用圆形图案填充矩阵

转载 作者:行者123 更新时间:2023-12-01 05:16:12 25 4
gpt4 key购买 nike

我想写一个函数来填充矩阵 m来自 m哪里m奇数如下:
1) 它从矩阵的中间单元格开始(例如,对于 5 x 5 A,矩阵中间单元格是 A[2,2] ),并将数字 1 放在那里
2)它向前移动一个单元格并将1添加到前一个单元格并将其放入第二个单元格
3)它向下放3,左4,左5,上6,上7,......
例如,结果矩阵可能是这样的:

> 7 8 9 
6 1 2
5 4 3

有人可以帮我实现吗?

最佳答案

max_x=5
len=max_x^2
middle=ceiling(max_x/2)
A=matrix(NA,max_x,max_x)

increments=Reduce(
f=function(lhs,rhs) c(lhs,(-1)^(rhs/2+1)*rep(1,rhs)),
x=2*(1:(max_x)),
init=0
)[1:len]
idx_x=Reduce(
f=function(lhs,rhs) c(lhs,rep(c(TRUE,FALSE),each=rhs)),
1:max_x,
init=FALSE
)[1:len]
increments_x=increments
increments_y=increments
increments_x[!idx_x]=0
increments_y[idx_x]=0

A[(middle+cumsum(increments_x)-1)*(max_x)+middle+cumsum(increments_y)]=1:(max_x^2)


#> A
# [,1] [,2] [,3] [,4] [,5]
#[1,] 21 22 23 24 25
#[2,] 20 7 8 9 10
#[3,] 19 6 1 2 11
#[4,] 18 5 4 3 12
#[5,] 17 16 15 14 13

解释:
向量 increments表示沿着数字递增的路径的步骤。要么是 0/+1/-1用于不变/增加/减少行和列索引。重要的是,这些数字不区分列和行的步骤。这由向量 idx_x 管理- 它屏蔽了沿行( TRUE )或列( FALSE )的增量。
最后一行考虑了 R 的索引逻辑(矩阵索引沿列增加)。

编辑:
根据 OP 的要求,这里提供了有关 increments 的更多信息计算向量。

你总是走两条等长的连续直线(按行或按列)。但是,在您走了两次之后,长度会增加 1。这对应于 x=2*(1:(max_x))rep(1,rhs) 一起争论.前两次连续行走是在增加的列/行方向。然后沿负方向跟随两个,依此类推(交替)。这是由 (-1)^(rhs/2+1) 解释的.

关于r - 用圆形图案填充矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com