加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python:循环网格分类的更多Pythonic方法

发布时间:2020-12-20 13:31:28 所属栏目:Python 来源:网络整理
导读:我有一个11×11大小的网格放在散点图上.散点图是100个随机生成的对.在每个网格空间内,是一种分类类型,其中: 类型A在X和Y轴上都大于0,但小于0.5, B型在X轴和Y轴上都大于0.5,但小于1.5 等… 我想知道每个网格空间中有多少个点,以及该网格空间中存在的对.这部
我有一个11×11大小的网格放在散点图上.散点图是100个随机生成的对.在每个网格空间内,是一种分类类型,其中:

类型A在X和Y轴上都大于0,但小于0.5,
B型在X轴和Y轴上都大于0.5,但小于1.5
等…

我想知道每个网格空间中有多少个点,以及该网格空间中存在的对.这部分不是问题,我只是想知道是否有更多的pythonic方式来编写我的循环,因为我不想为每个网格空间编写if语句.

我的脚本如下:

TypeA = []
    TypeB = []

    fig = plt.figure()
    ax = fig.gca()
    ax.set_xticks(np.arange(0.5,10.5,1))
    ax.set_yticks(np.arange(0.5,1))

    for ii in range(100):
        RNumX = randint(0,10)
        RNumY = randint(0,10)

        print RNumX,RNumY

        hold(True)
        plot1 = plt.scatter(RNumX,RNumY)

        if RNumX >= 0 and RNumX < 0.5:
            if RNumY >= 0 and RNumY < 0.5:
                PairA = (RNumX,RNumY)
                TypeA.append(PairA)

            elif RNumY >= 0.5 and RNumY < 1.5:
                PairB = (RNumX,RNumY)
                TypeB.append(PairB)

    SumA = len(TypeA)
    SumB = len(TypeB)

    print TypeA,SumA
    print TypeB,SumB

    plt.grid()
    plt.show()

解决方法

您可以键入矩阵并对值进行舍入以查找索引:

from random import random

# An 11 x 11 matrix of lists
Type = 11 * (11 * ([],),)

fig = plt.figure()
ax = fig.gca()
ax.set_xticks(np.arange(0.5,1))
ax.set_yticks(np.arange(0.5,1))

for ii in range(100):
    # If you want to use floats in stead of ints
    RNumX = 0.5 + 10 * random()
    RNumY = 0.5 + 10 * random()

    print RNumX,RNumY

    hold(True)
    plot1 = plt.scatter(RNumX,RNumY)

    # Round the coordinates to find the indices
    Type[int(RNumX + 0.5)][int(RNumY + 0.5)].append((RNumX,RNumY))

# Print all buckets as your snippet implies
for x in Type:
    for y in x:
        print y,len(y)

# Print only buckets with both values in the same range as your question implies
for x in range(11):
    print Type[x][x],len(Type[x][x])

plt.grid()
plt.show()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读