pysal.lib.weights.
w_clip
(w1, w2, outSP=True, silence_warnings=False)[源代码]¶使用不同的w对象(w2)裁剪连续w对象(w1),以便只有w2具有非零值的单元格在w1中保留非零值。
对w1和w2进行检查,以确保它们符合适当的格式,如果不符合,则进行转换。
参数: |
|
---|---|
返回: |
|
实例
>>> from pysal.lib.weights import lat2W
首先,使用皇后连续性从晶格创建一个W对象,并对其进行行标准化(请注意,当我们剪裁对象时,这些权重将保持不变,但它们不再必然代表行标准化):
>>> w1 = lat2W(3, 2, rook=False)
>>> w1.transform = 'R'
假设观测值0、2、3和4属于一个组,1、5属于另一个组,我们不希望两个组在我们的权重中相互作用(即,如果i和j属于不同组,则w_i j=0)。为此,我们使用以下方法:
>>> import pysal.lib
>>> w2 = pysal.lib.weights.util.block_weights(['r1', 'r2', 'r1', 'r1', 'r1', 'r2'])
为了说明W2只被认为是二进制的,即使传递的对象不是二进制的,我们可以对它进行行标准化。
>>> w2.transform = 'R'
剪裁对象 wc
将只包含一个组(“r1”或“r2”)内发生的空间皇后关系,但将消除跨组发生的关系。
>>> wcs = pysal.lib.weights.set_operations.w_clip(w1, w2, outSP=True)
这将创建一个稀疏对象(当n较大时建议使用)。
>>> wcs.sparse.toarray()
array([[0. , 0. , 0.33333333, 0.33333333, 0. ,
0. ],
[0. , 0. , 0. , 0. , 0. ,
0. ],
[0.2 , 0. , 0. , 0.2 , 0.2 ,
0. ],
[0.2 , 0. , 0.2 , 0. , 0.2 ,
0. ],
[0. , 0. , 0.33333333, 0.33333333, 0. ,
0. ],
[0. , 0. , 0. , 0. , 0. ,
0. ]])
如果我们想要一个原始的W对象,我们可以通过参数来控制它。 outSP
:
>>> wc = pysal.lib.weights.set_operations.w_clip(w1, w2, outSP=False)
警告:有2个断开连接的观测岛ID:[1,5]>>>wc.full()[0]数组([[0)。,0。,0.33333333,0.33333333,0.,
- ],请
- 〔0〕。,0。,0。,0。,0。,
- ],请
- [0.2,0.,0。,0.2,0.2,
- ],请
- [0.2,0.,0.2,0.0.2,
- ],请
- 〔0〕。,0。,0.33333333,0.33333333,0.,
- ],请
- 〔0〕。,0。,0。,0。,0。,
- ])
您可以检查它们实际上是相同的:
>>> wcs.sparse.toarray() == wc.full()[0]
array([[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True]])