4

散布図の上に配置された 11 行 11 列のサイズのグリッドがあります。散布図は、ランダムに生成された 100 個のペアです。各グリッド スペース内には、次のような分類タイプがあります。

タイプ A は 0 より大きく、X 軸と Y 軸の両方で 0.5 未満、タイプ B は 0.5 より大きく、X 軸と Y 軸の両方で 1.5 未満です。

各グリッド スペース内にいくつのポイントがあるか、およびそのグリッド スペースに存在するペアを知りたいです。この部分は問題ではありません。グリッド スペースごとに if ステートメントを記述する必要がないため、ループを記述するより Pythonic な方法があるかどうかを知りたいだけです。

私のスクリプトは次のとおりです。

    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, 10.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()  
4

2 に答える 2

1

Type を行列にして、値を丸めてインデックスを見つけることができます。

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, 10.5, 1))
ax.set_yticks(np.arange(0.5, 10.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() 
于 2012-11-20T16:30:19.780 に答える