如何在应用花式索引过滤器的同时将数组的一列放入新的数组中?

时间:2019-03-29 16:01:44

标签: python arrays numpy

所以基本上我有一个数组,由14列和426行组成,每一列代表一只狗的一个属性,每一行代表一只狗,现在我想知道患病狗的平均心脏频率,即14 。列是指示狗是否生病的列[0 =健康1 =生病],第8行是心脏频率。现在我的问题是,我不知道如何从整个数组中取出8.列,并对其使用布尔过滤器

我对Python很陌生。如前所述,我认为我知道该做些什么[使用花式索引过滤器],但是我不知道该怎么做。我尝试在仍位于原始Array中的同时进行此操作,但没有成功,因此我认为我需要将Infos放入另一数组中,并在该数组上使用布尔过滤器。

编辑:好的,这是我现在得到的代码:

import numpy as np

def average_heart_rate_for_pathologic_group(D):

    a=np.array(D[:, 13])    #gets information, wether the dogs are sick or not
    b=np.array(D[:, 7])     #gets the heartfrequency
    R=(a >= 0)              #gets all the values that are from sick dogs
    amhr = np.mean(R)       #calculates the average heartfrequency
    return amhr

3 个答案:

答案 0 :(得分:1)

我认为布尔索引是一种前进的方式。 这项工作的快捷方式如下:

#Your data:
data = [[0,1,2,3,4,5,6,7,8...],[..]...]
#This indexing chooses the rows in the 8th column that equals 1 and then their
#column number 14 values. Any analysis can be done after this on the new variable
heart_frequency_ill = data[data[:,7] == 1,13]

答案 1 :(得分:0)

可能您实际上必须将数据从原始阵列复制到具有选定数据的新阵列中。

您能否与一个3行或4行数据共享一个样本?

我会尝试的。

让我在此处构建4列的data(但是您可以在问题中使用14列)

data = [['c1a','c2a','c3a','c4a'], ['c1b','c2b','c3b','c4b']]

您可以使用numpy.array来获取其 nth 列。 看看如何获​​得第二列:

import numpy as np a = np.array(data) a[:,2]

答案 2 :(得分:0)

如果要获取所有健康狗的8.列,则可以执行以下操作:

    //Declarations
    int A=0,B=0,C=0,D=0,F=0, score,I, students;
    I=1;

    System.out.println("How many students are in your class: ");
    students = input.nextInt();
    while (I<=students) {
        System.out.println("enter a score:");
        score=input.nextInt();


        if(score >= 90 && score <= 100)
            A++;
        else if(score>=80 && score<=89)
            B++;
        else if(score>=70 && score<=79)
            C++;
        else if(score>=60 && score<=69)
            D++;
        else if(score>=0 && score<=59)
            F++;


        I++;  //or students--

    }

    System.out.println("Total number of A's:"+ A);
    System.out.println("Total number of B's:"+ B);
    System.out.println("Total number of C's:"+ C);
    System.out.println("Total number of D's:"+ D);
    System.out.println("Total number of F's:"+ F);

如果您还想计算均值:

# we use 7 for the column because the index starts by 0
# we use filter and fancy to get the rows where the conditions are true
# we use n.argwhere to get the indices where the conditions are true
A[np.argwhere([A[:,13] == 0])[:,1],7]