繁体   English   中英

在python中对二维数组的一部分求和

[英]Summing part of 2D array in python

我有一个二维数组。 操作数组的 x 列后,我创建了一个新的二维数组 (data2),其中对 x 列进行了新的更改(y 列保持不变)。 我现在想将 data2 中的 y 值数组附加到一个新数组中,仅当其 x 值大于 3 或小于 5 时。例如,如果二维数组是 ([2,3], [4,5] , [3.5,6], [9,7]),我只想要新数组中的 y 值 5 和 6,因为它们的 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

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

给定一个数组

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

您可以使用np.where()找到x值大于 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.])

您可以使用此函数来展平列表,然后根据其附加值。

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...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM