把一个空间区域分成几个分区

2024-04-24 19:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个65点的散点图。我想把这些点分成36个矩形列表。这相当于将绘制图形的空间区域划分为36个区域。有没有一个“pythonic”的方法来做到这一点,而不创建36个条件?你知道吗

例如,为了简化,下面显示的x和y坐标包含20个点。有没有一个简单的方法把它们分成10个大小相等的区域?你知道吗

x=[484248.77, 481335.51, 473814.14, 488522.14, 481703.17, 479105.54, 480700.85, 482816.02, 484579.26, 483984.83, 483278.12, 473877.12, 484711.57, 481574.8, 484374.02, 483920.51, 484318.97, 482229.34, 481458.91, [公元487751.09年]

y=[7421919.17, 7417638.85, 7426640.34, 7420657.74, 7423742.49, 7422636.23, 7422958.38, 7422550.7, 7421886.44, 7421707.53, 7415756.43, 7424344.33, 7422787.38, 7418556.75, 7420368.91, 7421946.9, 7419293.06, 7424612.41, 7427565.78, [公元7405473.74年]


Tags: 方法图形区域列表绘制空间pythonic条件
1条回答
网友
1楼 · 发布于 2024-04-24 19:04:22

您可以使用np.digitizethis Q&A。你必须自己决定如何分配垃圾箱,即10x1或5x2或2x5或1x10。你知道吗

import numpy as np
from scipy import sparse

def sort_to_bins_sparse(idx, data, mx=-1):
    if mx==-1:
        mx = idx.max() + 1    
    aux = sparse.csr_matrix((data, idx, np.arange(len(idx)+1)), (len(idx), mx)).tocsc()
    return np.split(aux.data, aux.indptr[1:]), \
        np.split(aux.indices, aux.indptr[1:])

def bin(data, bincounts):
    data = np.asanyarray(data)
    idx = [np.digitize(d, np.linspace(d.min(), d.max(), b, endpoint=False))-1
           for d, b in zip(data, bincounts)]
    flat = np.ravel_multi_index(idx, bincounts)
    _, idx = sort_to_bins_sparse(flat, data[0])
    return [data[:,i] for i in idx]

x = [484248.77, 481335.51, 473814.14, 488522.14, 481703.17, 479105.54, 480700.85, 482816.02, 484579.26, 483984.83, 483278.12, 473877.12, 484711.57, 481574.8, 484374.02, 483920.51, 484318.97, 482229.34, 481458.91, 487751.09]

y = [7421919.17, 7417638.85, 7426640.34, 7420657.74, 7423742.49, 7422636.23, 7422958.38, 7422550.7, 7421886.44, 7421707.53, 7415756.43, 7424344.33, 7422787.38, 7418556.75, 7420368.91, 7421946.9, 7419293.06, 7424612.41, 7427565.78, 7405473.74]

print(bin((x,y),(5,2)))

输出:

[array([], shape=(2, 0), dtype=float64), array([[ 473814.14,  473877.12],
       [7426640.34, 7424344.33]]), array([], shape=(2, 0), dtype=float64), array([[ 479105.54],
       [7422636.23]]), array([], shape=(2, 0), dtype=float64), array([[ 481335.51,  481703.17,  480700.85,  481574.8 ,  482229.34,
         481458.91],
       [7417638.85, 7423742.49, 7422958.38, 7418556.75, 7424612.41,
        7427565.78]]), array([[ 483278.12],
       [7415756.43]]), array([[ 484248.77,  482816.02,  484579.26,  483984.83,  484711.57,
         484374.02,  483920.51,  484318.97],
       [7421919.17, 7422550.7 , 7421886.44, 7421707.53, 7422787.38,
        7420368.91, 7421946.9 , 7419293.06]]), array([[ 487751.09],
       [7405473.74]]), array([[ 488522.14],
       [7420657.74]]), array([], shape=(2, 0), dtype=float64)]

相关问题 更多 >