Как получить один столбец массива в новый массив, применяя к нему причудливый индексный фильтр? - PullRequest
2 голосов
/ 29 марта 2019

Итак, в основном у меня есть массив, который состоит из 14 столбцов и 426 строк, каждый столбец представляет одно свойство собаки, и каждый ряд представляет одну собаку, теперь я хочу узнать среднюю частоту сердечных сокращений больной собаки, 14 . столбец - это столбец, который указывает, болеет ли собака или нет [0 = здоров, 1 = болен], строка 8. - частота сердечных сокращений. Теперь моя проблема в том, что я не знаю, как извлечь столбец 8. из всего массива и использовать для него логический фильтр

Я довольно новичок в Python. Как я упоминал выше, я думаю, что знаю, что мне нужно делать [Использовать причудливый индексный фильтр], но я не знаю, как я могу это сделать. Я пытался сделать это, оставаясь в исходном массиве, но это не сработало, поэтому я подумал, что мне нужно вставить информацию в другую и использовать на ней логический фильтр.

РЕДАКТИРОВАТЬ: Хорошо, вот код, который я получил прямо сейчас:

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 ]

1 голос
/ 29 марта 2019

Я думаю, что логическое индексирование - это путь вперед.Ярлыки для этой работы, как:

#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]
0 голосов
/ 29 марта 2019

Если вы хотите получить 8. столбец всех здоровых собак, вы можете сделать это следующим образом:

# 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]

Если вы также хотите вычислить среднее значение:

A[np.argwhere([A[:,13] == 0])[:,1],7].mean()
0 голосов
/ 29 марта 2019

Возможно, вам придется скопировать данные из исходного массива в новый с выбранными данными.

Не могли бы вы поделиться примером, скажем, с 3 или 4 строками ваших данных?

Я попробую подумать.

Позвольте мне построить data с 4 столбцами здесь (но вы можете использовать 14, как в вашей задаче)

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

Вы можете использовать numpy.array, чтобы получить столбец nth . Посмотрите, как можно получить 2-й столбец:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...