0

我有一个使用 numpy.loadtxt 制作的 numpy ndarray。我想根据第三列中的条件从中提取一整行。比如:如果 array[2][i] 满足我的条件,那么也得到 array[0][i] 和 array [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;
        }
    }
}
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 的第三行。如果您键入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]
于 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 回答