在python中总结2D数组的一部分

时间:2016-09-13 16:54:24

标签: python arrays function numpy append

我有一个2D数组。在操作数组的x列之后,我创建了一个新的2D数组(data2),其中包含对x列的新更改(并且y列保持不变)。我现在想要将data2中的y值数组附加到新数组中,只要它的x值大于3或小于5.例如,如果2D数组是([2,3],[4,5] ,[3.5,6],[9,7]),我只想在我的新数组中得到5和6的y值,因为它们的x值在3到5之间。我被卡住了。请帮忙!

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('blah.txt') #blah.txt is a 2d array

c = (3*10)^8

x = c /((data[:,0])*10)

y = data[:,1]


data2 = np.array((x,y)).T

def new_yarray(data2):

    yarray =[]

    if data2[:,0] <= 5 or data2[:,0] >= 3:

        np.append(data2[:,1])

    print yarray

    return yarray

2 个答案:

答案 0 :(得分:1)

为了清楚起见,这是一个单行解决方案,分为几个步骤。

给定数组

>>> a
array([[ 2. ,  3. ],
       [ 4. ,  5. ],
       [ 3.5,  6. ],
       [ 9. ,  7. ]])

您可以使用x找到np.where()值大于3且小于5的元素的索引

>>> np.where(np.logical_and(a[:,0] > 3,a[:,0] < 5))
(array([1, 2]),)

其中a[:,0] = array([ 2. , 4. , 3.5, 9. ])是所有x值的数组。现在,您可以通过以下方式获取y所有相应的3 < x < 5值。

>>> a[np.where(np.logical_and(a[:,0] > 3,a[:,0] < 5))][:,1]
array([ 5.,  6.])

答案 1 :(得分:0)

您可以使用此功能展平列表,然后根据值附加值。

def flatten_list(a, result=None):
    """ Flattens a nested list. """
    if result is None:
        result = []

    for x in a:
        if isinstance(x, list):
            flatten_list(x, result)
        else:
            result.append(x)
    return result

lst = ([2,3], [4,5], [3.5,6], [9,7])

lst = flatten_list(lst)

new_lst = []
for i in lst:
    if (float(i) > 3 and float(i) < 5):
        new_lst.append(i)
print new_lst

在这种情况下,只有3.5和4大于3且小于5 ......