2017-09-22 47 views
1

基於條件將列表轉換爲二元決策是否有非冗長的方式?例如: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" 
+1

'(np.array(patientAge)> 18).astype(int)'如果您使用'numpy'。 –

+0

試試:'mean(filter(lambda x:x> 18,patientAge))'另外,挑選和比較語言沒有意義。對於matlab比較好的每一件事,Python有10件更好的事情。 –

+0

這對我工作的真實數據不起作用,因爲我必須根據條件獲得一個數組的索引,並從另一個數組中選擇相應的索引:「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

回答

3

只需使用列表理解:

>>> 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] 
1
  • 理解:[ v > 18 for v in patientAge ]
  • 如果使用numpy的(假設patientAgenumpy.array),你也可以寫patientAge > 18並獲得布爾numpy.array
0

您可以打開列表到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 。

相關問題