基於條件將列表轉換爲二元決策是否有非冗長的方式?例如:python:根據條件將列表轉換爲二元決策
patientAge = [19, 15, 13, 21, 37]
# wanted output: [1, 0, 0, 1, 1] # true if >18 otherwise false
# e.g. in matlab simply "patientAge>18"
基於條件將列表轉換爲二元決策是否有非冗長的方式?例如:python:根據條件將列表轉換爲二元決策
patientAge = [19, 15, 13, 21, 37]
# wanted output: [1, 0, 0, 1, 1] # true if >18 otherwise false
# e.g. in matlab simply "patientAge>18"
只需使用列表理解:
>>> patientAge = [19, 15, 13, 21, 37]
>>> [age > 18 for age in patientAge]
[True, False, False, True, True]
,如果你必須有1或0:
>>> [int(age > 18) for age in patientAge]
[1, 0, 0, 1, 1]
[ v > 18 for v in patientAge ]
patientAge
是numpy.array
),你也可以寫patientAge > 18
並獲得布爾numpy.array
您可以打開列表到numpy
陣列:
>>> patientAge = [19, 15, 13, 21, 37]
>>> patientAge = numpy.array(patientAge)
>>> patientAge>18
array([ True, False, False, True, True], dtype=bool)
>>> _+0 # if you want ints
array([1, 0, 0, 1, 1])
語法是熟悉的,因爲numpy
(和matplotlib
)當然是基於Matlab 。
'(np.array(patientAge)> 18).astype(int)'如果您使用'numpy'。 –
試試:'mean(filter(lambda x:x> 18,patientAge))'另外,挑選和比較語言沒有意義。對於matlab比較好的每一件事,Python有10件更好的事情。 –
這對我工作的真實數據不起作用,因爲我必須根據條件獲得一個數組的索引,並從另一個數組中選擇相應的索引:「mean(score(patientAge> 18))」的Matlab語義「 ?即每個人的平均分數超過18? patientAge = [19,15,13,21,37] 分數= [123,213,429,98,50] patientAge = np.array(patientAge) 得分= np.array(評分) IDX = (患者年齡> 18) print(idx) print(np.mean(score(idx)))#TypeError:'numpy.ndarray'object is not callable – user2952361