-1

寸法が10x10の正方形があり、それを寸法2x2の25個の小さな正方形に分割したいので、最終的には5x5の配列になります。また、新しい正方形のそれぞれの中心座標を見つけます。出発点として次のコードを書きました。これにより、x(0)座標とy(0)座標の2乗の中心の座標がわかります。ネスティングを試しましたが、y値が高すぎました。1つの変数を固定して、他の変数を反復する必要があることはわかっています。それらをリンクする方法がわかりません。誰かが対角線から外れた要素を見つけるのに役立ついくつかのドキュメントを手伝ったり指摘したりできるなら、それはありがたいです。前もって感謝します。

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)       

たとえば、1辺が2の正方形があり、それを1辺が1の長さの4つの正方形に分割した場合、私が望むのは次のようなものです。

 [(.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))

ここxに、yあなたが「対角エントリ」と呼んでいると思うものが含まれています。正方形の「左上」がにあると仮定して計算された、それぞれの一意のx座標とy座標(0,0)。x座標とy座標の完全な配列は、「対角外のエントリ」とあなたが言及した「対角のエントリ」の和集合である可能性があり、クロネッカー積を使用して簡単に計算できます。これにより、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

これはあなたが望むものですか(私はそれを更新して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 に答える