我有一个尺寸为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,这就是我在这里学习的原因
答案 0 :(得分: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])
答案 1 :(得分: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))
此处x
和y
包含我认为您所指的“对角线条目”,即。每个唯一的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.]]
答案 2 :(得分: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.]]])