0

numpy.loadtxt を使用して作成した numpy ndarray があります。3 列目の条件に基づいて、行全体を取得したいと考えています。のようなもの: 配列 [2] [i] が私の条件を満たしている場合、配列 [0] [i] と配列 [1] [i] も取得します。私はPythonとすべての派手な機能が初めてなので、これを行うための最良の方法を探しています。理想的には、一度に 2 行をプルしたいのですが、常に偶数の行があるとは限らないので、それが問題になると思います

import numpy as np

'''
Created on Jan 27, 2013

@author:
'''
class Volume:

    f ='/Users/Documents/workspace/findMinMax/crapc.txt'
    m = np.loadtxt(f, unpack=True, usecols=(1,2,3), ndmin = 2)


    maxZ = max(m[2])
    minZ = min(m[2])
    print("Maximum Z value: " + str(maxZ))
    print("Minimum Z value: " + str(minZ))

    zIncrement = .5
    steps = maxZ/zIncrement
    currentStep = .5
    b = []

    for i in m[2]:#here is my problem
         while currentStep < steps: 
            if m[2][i] < currentStep and m[2][i] > currentStep - zIncrement:
                b.append(m[2][i]) 
            if len(b) < 2:
                currentStep + zIncrement

                print(b)

これは、私が望むものの一般的なアイデアであるJavaで行ったコードです。

while( e < a.length - 1){
for(int i = 0; i < a.length - 1; i++){
        if(a[i][2] < stepSize && a[i][2] > stepSize - 2){

            x.add(a[i][0]);
            y.add(a[i][1]);
            z.add(a[i][2]);
        }
        if(x.size()  < 1){
            stepSize += 1;
        }
    }
}
4

2 に答える 2

2

まず第一に、おそらくそのクラス定義にコードを入れたくないでしょう...

import numpy as np


def main():
    m = np.random.random((3, 4))
    mask = (m[2] > 0.5) & (m[2] < 0.8)  # put your conditions here
                                        # instead of 0.5 and 0.8 you can use
                                        # an array if you like
    m[:, mask]

if __name__ == '__main__':
    main()

maskブール配列m[:, mask]です。必要な配列です

m[2] は m の 3 行目です。入力m[2] + 2すると、古い値 + 2 の新しい配列が得られm[2] > 0.5ます。ブール値の配列が作成されます。ipython (www.ipython.org) でこれを試してみることをお勧めします。

m[:, mask]the:は「すべての行を取得する」ことを意味し、マスクはどの列を含める必要があるかを示します。

アップデート

次の試み:-)

for i in range(0, len(m), 2):
    two_rows = m[i:i+2]
于 2013-02-03T21:28:20.213 に答える
0

条件を単純な関数として記述できる場合

def condition(value):
    # return True or False depending on value

次に、次のようにサブ配列を選択できます。

cond = condition(a[2])
subarray0 = a[0,cond]
subarray1 = a[1,cond]
于 2013-02-06T20:51:21.037 に答える