2012-04-11 36 views
-1

我有一个正方形,它的维数为10x10,我想将它分成25个尺寸为2x2的较小正方形,所以最后我将有一个5x5阵列我还想要做的是找到每个新方格的中心坐标。我写了下面的代码作为起点,它给出了x(0)和y(0)坐标的平方中心坐标。我尝试过嵌套,但是这给了我很高的价值。我知道我需要保持一个固定的变量,并按照它来迭代另一个变量。我只是不确定如何链接它们。如果任何人可以帮忙或指出一些文件,这将有助于找到非对角元素,它将不胜感激。提前致谢。将一个正方形划分为N个较小的正方形,并找到N个较小正方形的中心坐标

def Cell_centers(): 
dx = 2 
dy = 2    #length of cell side 
N = 5    #number of cells 
Xc = zeros(N)  #array creation 
Yc = zeros(N)    
x1=0 
y1=0 

for i in range(N):  #for loops to define cell centers 
    Xc[i] = dx/2 +x1     
    x1+=dx     #increments x1 positions by dx 
for j in range(N): 
    Yc[j] = dy/2 +y1 
    y1+=dy 

centers = np.array((Xc, Yc), dtype=float)  
return(centers)  

例如,如果我们有一个正方形,这是2以下,并把它分成每边长1的四个正方形什么,我想是这样的

[(.5 ,1.5),(1.5,1.5)] 
[(.5,.5) ,(.5 ,1.5)] 

我不知道一些事情知道这是否正确Python这就是为什么我在这里学习

+2

我不清楚代码在做什么。 “25个小方块”和“对角线元素”是什么意思? – 2012-04-11 03:43:50

+0

@Steve我编辑钙化 – Surfcast23 2012-04-11 03:53:54

+0

这听起来像你想从100个数字(10x10)开始,并以25(5x5)结束。那么你是否想要将每组4个数字压缩成一个数字? – tom10 2012-04-11 04:46:47

回答

1

这是你想要的东西(我更新它返回一个数组)?

import numpy as np 
dx = 2. 
dy = 2. 
N = 5 
centers = np.mgrid[dx/2:N*dx:dx, dy/2:N*dy:dy] 

结果是:

>>> centers.shape 
(2, 5, 5) 
>>> centers 
array([[[ 1., 1., 1., 1., 1.], 
     [ 3., 3., 3., 3., 3.], 
     [ 5., 5., 5., 5., 5.], 
     [ 7., 7., 7., 7., 7.], 
     [ 9., 9., 9., 9., 9.]], 

     [[ 1., 3., 5., 7., 9.], 
     [ 1., 3., 5., 7., 9.], 
     [ 1., 3., 5., 7., 9.], 
     [ 1., 3., 5., 7., 9.], 
     [ 1., 3., 5., 7., 9.]]]) 

更新:如果你想坐标是沿着过去的dimenssion可以使用rollaxis。

>>> centers = np.rollaxis(centers, 0, centers.ndim) 
>>> centers.shape 
(5, 5, 2) 
>>> centers 
array([[[ 1., 1.], 
     [ 1., 3.], 
     [ 1., 5.], 
     [ 1., 7.], 
     [ 1., 9.]], 

     [[ 3., 1.], 
     [ 3., 3.], 
     [ 3., 5.], 
     [ 3., 7.], 
     [ 3., 9.]], 

     [[ 5., 1.], 
     [ 5., 3.], 
     [ 5., 5.], 
     [ 5., 7.], 
     [ 5., 9.]], 

     [[ 7., 1.], 
     [ 7., 3.], 
     [ 7., 5.], 
     [ 7., 7.], 
     [ 7., 9.]], 

     [[ 9., 1.], 
     [ 9., 3.], 
     [ 9., 5.], 
     [ 9., 7.], 
     [ 9., 9.]]]) 
+1

谢谢你的帮助Bago。我需要的是一个具有方形中心的x和y坐标的数组 – Surfcast23 2012-04-11 18:15:58

+0

mgrid返回一个数组,我将它分成两部分,因为我没有仔细阅读您的问题,我已经更新了我的答案以展示如何保留它作为一个数组。 – 2012-04-11 18:25:07

+0

好的,谢谢! – Surfcast23 2012-04-11 18:41:47

1

你想要diagonal方法吗?

In [1]: x = scipy.randn(5,5) 

In [2]: x 
Out[2]: 
array([[ 0.90077481, 0.33192388, -0.16153472, -0.78663912, -2.45735516], 
     [ 0.51063641, 0.01209047, -0.39667355, -0.9603519 , -0.19263007], 
     [-0.73422795, -0.45595695, -0.8915272 , 0.20074704, -0.78286524], 
     [ 0.53628315, 0.93238853, -1.16648829, 1.26122884, -0.70490362], 
     [ 0.31389001, -1.48574572, 2.16641639, -0.67982623, -0.59455518]]) 

In [3]: x.diagonal(offset=2) 
Out[3]: array([-0.16153472, -0.9603519 , -0.78286524]) 

In [4]: x.diagonal(offset=-3) 
Out[4]: array([ 0.53628315, -1.48574572]) 
+0

我有对角线元素我需要的是对角线的 – Surfcast23 2012-04-11 03:46:02

+0

对不起编号没有正确解释我的输出并提出错误的问题 – Surfcast23 2012-04-11 04:01:52

+1

@ Surfcast23:这正是史蒂夫给你的 - 仔细看'x.diagonal(offset = N)'的输出。 – 2012-04-11 04:02:41

1

如果我明白你正确地问,好像你只是想这样的事情(使用numpy的数组实现):

import numpy as np 

n=5 
dx=2. 
dy=dx 

x=(dx/2.)+dx*np.arange(0,n).reshape((n,1)) 
y=(dy/2.)+dy*np.arange(0,n).reshape((1,n)) 

xcoords=np.kron(np.ones_like(x.T),x) 
ycoords=np.kron(y,np.ones_like(y.T)) 

这里xy包含什么,我想你指作为“对角线条目”,即。每个唯一的x坐标和y坐标,假定方格的“左上角”在(0,0)处计算。然后可以使用Kronecker product方便地计算出x和y坐标的完整阵列,我认为这可能是“非对角条目”与您提到的“对角条目”的联合。这给出了一个5x5的双阵列,一个拿着所有中心的x coordindates,另一只手拿对应的y坐标:

In [77]: print xcoords 
[[ 1. 1. 1. 1. 1.] 
[ 3. 3. 3. 3. 3.] 
[ 5. 5. 5. 5. 5.] 
[ 7. 7. 7. 7. 7.] 
[ 9. 9. 9. 9. 9.]] 

In [78]: print ycoords 
[[ 1. 3. 5. 7. 9.] 
[ 1. 3. 5. 7. 9.] 
[ 1. 3. 5. 7. 9.] 
[ 1. 3. 5. 7. 9.] 
[ 1. 3. 5. 7. 9.]] 
+1

谢谢你的帮助。我不知道Kron的功能非常酷。我实际需要的是一个包含小方块中心的x和y坐标的数组。 – Surfcast23 2012-04-11 18:09:32

+1

这些值是每个小方块中心的x和y坐标,相对于“父”方块上的固定位置。你想如何保存坐标?作为一个元组?作为数组中的另一个维度? – talonmies 2012-04-11 18:12:16

+0

哦,我现在看到它。谢谢 – Surfcast23 2012-04-11 18:44:00

相关问题