2012-04-11 35 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

相關問題