73083


データセットを作成したい。そこで以下のコードに改良を加えたい。  
コードで計算されているDisが、1<Dis<2の間に収まるようにしたい。  
つまり、それ以外の値を取るDisの行の組み合わせは捨てたいです。

しかし、最終的に得られるP_sample_2のデータは10×6の行列になるようにしたい。  
どのように考えるのがよいでしょうか？

[code]

    P_sample = []
    PP_sample = []
    Dis_sample = []
    for _ in range(10):
    # P_sample_allからランダムに行を取り出すための乱数を作成
        PP = np.random.choice(P_sample_all.shape[0], 2, replace=False)
        PP_sample.append(PP)
        
    # 取り出した原子位置間の距離を計算
        Dis=np.sqrt((P_sample_all[PP[0],0]-P_sample_all[PP[1],0])**2+
                  (P_sample_all[PP[0],1]-P_sample_all[PP[1],1])**2+
                  (P_sample_all[PP[0],2]-P_sample_all[PP[1],2])**2)
        Dis_sample.append(Dis)
        
    # 取り出した行を1つの行として扱うために変形
        P_sample_1 = P_sample_all[PP, :]
        P_sample.append(P_sample_1)
    P_sample_2 = np.reshape(P_sample, (10, 6))
    PP_sample, Dis_sample, P_sample_2
    
[/code]


CC BY-SA 4.0
2021-01-04T14:38:44.837
73073
2021-01-05T02:49:39.153
2021-01-05T02:49:39.153
42944
42944
question
python pandas numpy scipy
リストを作るときに、必要な要素数になるまで回したい


単純には二重ループを書いてはいかがでしょうか。

[code]

    for _ in range(10):
        accepted = False
        while not accepted:
            x = generate()
            accepted = condition(x)
        sample.append(x)
    
[/code]


CC BY-SA 4.0
2021-01-05T02:42:08.763
73081
2021-01-05T02:42:08.763
43417
73073
answer

[code]

    # 取り出した原子位置間の距離を計算
    Dis=np.sqrt((P_sample_all[PP[0],0]-P_sample_all[PP[1],0])**2+
              (P_sample_all[PP[0],1]-P_sample_all[PP[1],1])**2+
              (P_sample_all[PP[0],2]-P_sample_all[PP[1],2])**2)
    Dis_sample.append(Dis)
    
[/code]

を

[code]

    # 取り出した原子位置間の距離を計算
    Dis=np.sqrt((P_sample_all[PP[0],0]-P_sample_all[PP[1],0])**2+
              (P_sample_all[PP[0],1]-P_sample_all[PP[1],1])**2+
              (P_sample_all[PP[0],2]-P_sample_all[PP[1],2])**2)
    # 1<Dis<2　という条件が満たされる場合に、DisをDis_sampleに追加する。
    If((1<Dis) and (Dis<2)):
        Dis_sample.append(Dis)
    
[/code]

というように、条件を満たすもののみをリストに登録するようにして、リストの長さが必要な要素数に達したらループを終了させたらよ


CC BY-SA 4.0
2021-01-05T02:48:20.843
73083
2021-01-05T02:48:20.843
217
73073
answer