Пороговое значение списка Python с несколькими значениями - PullRequest
0 голосов
/ 04 ноября 2019

Хорошо, у меня есть массив 1000x100 со случайными числами. Я хочу ограничить этот список списком из нескольких чисел;эти числа идут от [3 до 9]. Если они превышают пороговое значение, я хочу, чтобы сумма строки добавлялась в список.

Я пробовал много способов, в том числе 3 раза для условных. Сейчас я нашел способ сравнить массив со списком чисел, но каждый раз, когда это происходит, я снова получаю случайные числа из этого списка.

xpatient=5
sd_healthy=2
xhealthy=7
sd_patient=2
thresholdvalue1=(xpatient-sd_healthy)*10
thresholdvalue2=(((xhealthy+sd_patient))*10)
thresholdlist=[]
x1=[]
Ahealthy=np.random.randint(10,size=(1000,100))
Apatient=np.random.randint(10,size=(1000,100))
TParray=np.random.randint(10,size=(1,61))
def thresholding(A,B): 
    for i in range(A,B):
        thresholdlist.append(i)
        i+=1
thresholding(thresholdvalue1,thresholdvalue2+1)
thresholdarray=np.asarray(thresholdlist)
thedivisor=10
newthreshold=(thresholdarray/thedivisor)
for x in range(61):
    Apatient=np.random.randint(10,size=(1000,100))
    Apatient=[Apatient>=newthreshold[x]]*Apatient
    x1.append([sum(x) for x in zip(*Apatient)])

Итак, мой цикл for состоит из случайного целого числавнутри, но если я этого не сделаю, я не вижу порога каждый ход. Я хочу, чтобы пороговое значение для всего массива было 3,3.1,3.2 и т. Д. И т. Д. Я надеюсь, что достиг своей цели. Заранее спасибо

1 Ответ

0 голосов
/ 04 ноября 2019

Вы можете решить вашу проблему, используя этот подход:

import numpy as np

def get_sums_by_threshold(data, threshold, axis): # use axis=0 to sum values along rows, axis=1 - along columns
    result = list(np.where(data >= threshold, data, 0).sum(axis=axis))
    return result

xpatient=5
sd_healthy=2
xhealthy=7
sd_patient=2
thresholdvalue1=(xpatient-sd_healthy)*10
thresholdvalue2=(((xhealthy+sd_patient))*10)

np.random.seed(100) # to keep generated array reproducable
data = np.random.randint(10,size=(1000,100))
thresholds = [num / 10.0 for num in range(thresholdvalue1, thresholdvalue2+1)]

sums = list(map(lambda x: get_sums_by_threshold(data, x, axis=0), thresholds))

Но вы должны знать, что ваш исходный массив содержит только целочисленные значения, и вы получите одинаковый результат для нескольких порогов, имеющих одинаковую целочисленную часть (например,3,0, 3,1, 3,2, ..., 3,9). Если вы хотите сохранить числа с плавающей точкой от 0 до 9 в исходном массиве с указанной формой, вы можете сделать следующее:

data = np.random.randint(90,size=(1000,100)) / 10.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...