-1

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

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 这就是我在这里学习的原因

4

3 回答 3

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). x 和 y 坐标的完整数组,我认为这可能是“非对角线条目”与您提到的“对角线条目”的联合,然后可以使用Kronecker product方便地计算。这给出了一对 5x5 数组,一个保存所有中心的 x 坐标,另一个保存相应的 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.]]
于 2012-04-11T09:10:48.543 回答
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])
于 2012-04-11T03:40:21.570 回答
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.]]])

更新:如果您希望坐标沿最后一个维度,您可以使用 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.]]])
于 2012-04-11T16:08:17.677 回答