Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:从矩阵中提取一个圆_R_Matrix - Fatal编程技术网

R:从矩阵中提取一个圆

R:从矩阵中提取一个圆,r,matrix,R,Matrix,给定一个边长为L的方阵,如何在R中提取所有落入能够填充该矩阵的最大可能圆中的值 < >我找到了C++,但是如何测试矩阵中每个单元的位置是否落入方程式?如何在使用应用示例时了解每个单元格的X和Y?对于某些8x8矩阵m: m = matrix(1:64,8,8) 创建坐标的数据框: g = expand.grid(1:nrow(m), 1:nrow(m)) 计算到中心的距离: g$d2 = sqrt ((g$Var1-4.5)^2 + (g$Var2-4.5)^2) 与圆半径相比: g$in

给定一个边长为L的方阵,如何在R中提取所有落入能够填充该矩阵的最大可能圆中的值


< >我找到了C++,但是如何测试矩阵中每个单元的位置是否落入方程式?如何在使用应用示例时了解每个单元格的X和Y?

对于某些8x8矩阵
m

m = matrix(1:64,8,8)
创建坐标的数据框:

g = expand.grid(1:nrow(m), 1:nrow(m))
计算到中心的距离:

g$d2 = sqrt ((g$Var1-4.5)^2 + (g$Var2-4.5)^2)
与圆半径相比:

g$inside = g$d2<=4
然后,您可以使用两列矩阵从矩阵中提取:

m[as.matrix(g[g$inside,c("Var1","Var2")])]
[1]  3  4  5  6 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[26] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 59 60
[51] 61 62
从你的图像来看,应该是64减去12(每个角三个)单元格,所以我的答案中52的长度看起来是正确的


如果你在寻找速度,那么跳过平方根,并与距离的平方16进行比较。但是你可能会发现C++中的解决方案快得多。家庭作业?请参见
?行
?列
并非真正的家庭作业。我处理巨大的光栅,想试试使用矩阵是否更有效。测试从每个单元格的中心到正方形中心的距离。毕达哥拉斯可以帮助你。对于8x8方形矩阵,中心位于(4.5,4.5),单元格位于(1,1)到(8,8)之间的整数,圆半径为4。使用expand.GRID创建单元格行/列对矩阵非常感谢您的回答。我主要关心的是记忆力而不是速度。我已经在使用velox软件包执行此分析,但在处理较大的光栅时出现内存错误。将这些光栅转换为矩阵并应用您的解决方案会更快一些,对内存的要求也会更低。我当然迟早会测试C++的空间分析。
m[as.matrix(g[g$inside,c("Var1","Var2")])]
[1]  3  4  5  6 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[26] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 59 60
[51] 61 62