0

私はpysalを把握しようとしています。次のように作成されたチェッカーボードがあるとします。

import numpy as np
import pysal

def build_checkerboard(w, h) :
    re = np.r_[ w*[0,1] ]        # even-numbered rows
    ro = np.r_[ w*[1,0] ]        # odd-numbered rows
    return np.row_stack(h*(re, ro))

cb = build_checkerboard(5, 5)

ここで、最後の行と列を削除して、 の重み行列で使用可能な次元に一致させますpysal

cb = np.delete(cb, (9), axis=0)
cb = np.delete(cb, (9), axis=1)

In[1]: cb
Out[1]:
array
  ([[0, 1, 0, 1, 0, 1, 0, 1, 0],
   [1, 0, 1, 0, 1, 0, 1, 0, 1],
   [0, 1, 0, 1, 0, 1, 0, 1, 0],
   [1, 0, 1, 0, 1, 0, 1, 0, 1],
   [0, 1, 0, 1, 0, 1, 0, 1, 0],
   [1, 0, 1, 0, 1, 0, 1, 0, 1],
   [0, 1, 0, 1, 0, 1, 0, 1, 0],
   [1, 0, 1, 0, 1, 0, 1, 0, 1],
   [0, 1, 0, 1, 0, 1, 0, 1, 0]])

ここで、クイーン隣接ルール (ムーア近傍cbとも呼ばれます) を使用して、結合数統計 ( my の値は または のいずれ0か) を使用しましょう。1

w=pysal.lat2W(3,3, rook=False) #This yields a 9x9 matrix
jc=pysal.Join_Counts(cb,w) #The Join Counts

さて、結果:

In[2]: jc.bb #The 1-to-1 joins
Out[2]: array([ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.])

In[3]: jc.bw #The 1-to-0 joins
Out[3]: array([ 12.,  12.,  12.,  12.,  12.,  12.,  12.,  12.,  12.])

In[4]: jc.ww #The 0-to-0 joins
Out[5]: array([ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.])

In[5]: jc.J #The total number of joins
Out[5]: 20.0

私の質問:

  1. 異なる結合に対して単一の値ではなく、代わりに配列を取得するのはなぜですか? また、配列の各値は 1 つのマトリックス セルを参照しているように見えますが、合計は得られません。
  2. 20.0結合の総数で言えば、です4+4+12。マトリックスのサイズと構造を考えると、より多くの結合 (変更) が予想されます。取得した数値が予想とはかけ離れているのはなぜですか?
4

1 に答える 1

1

の最初の引数pysal.JoinCountsは次元の配列です(n,) 。チェッカーボードの場合、次のようなものが必要だと思います。

>>> import numpy as np
>>> import pysal as ps
>>> w = ps.lat2W(3, 3, rook=False) # n=9, so W is 9x9
>>> y = np.array([0, 1, 0, 1, 0, 1, 0, 1, 0]) # attribute array n elements
>>> jc = ps.Join_Counts(y, w)
>>> jc.bb  # number of bb joins
4.0
>>> jc.ww  # number of ww joins
4.0
>>> jc.bw  # number of bw (wb) joins
12.0
>>> w.s0   # 2x total number of joins
40.0
>>> w.s0 == (jc.bb + jc.ww + jc.bw) * 2
True

詳細については、ガイドを参照してください。

于 2016-11-01T14:46:30.447 に答える