从numpy数组中提取数据

时间:2013-02-03 21:04:58

标签: python numpy

我使用numpy.loadtxt创建了一个numpy ndarray。我想根据第三列中的条件从中拉出整行。类似于:如果array [2] [i]符合我的条件,那么也得到数组[0] [i]和数组[1] [i]。我是python的新手,以及所有的numpy功能,所以我正在寻找最好的方法来做到这一点。理想情况下,我想一次拉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;
        }
    }
}

2 个答案:

答案 0 :(得分: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的第三行。如果键入m[2] + 2,则会得到一个包含旧值+ 2的新数组。m[2] > 0.5创建一个带有布尔值的数组。最好用ipython(www.ipython.org)

来尝试这些东西

在表达式m[:, mask]中,:表示“占用所有行”,掩码描述应包含哪些列。

<强>更新

接下来尝试: - )

for i in range(0, len(m), 2):
    two_rows = m[i:i+2]

答案 1 :(得分:0)

如果您可以将您的条件写成一个简单的函数

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

然后您可以选择这样的子阵列:

cond = condition(a[2])
subarray0 = a[0,cond]
subarray1 = a[1,cond]