2017-01-16 31 views
4

我有一個輸入陣列看起來像這樣:轉換numpy的陣列浮筒爲二進制(0或1的整數)

[[ 0. 1. ] 
    [ 10. 0.4] 
    [ 20. 1.4] 
    [ 30. 3. ] 
    [ 40. 1.1] 
    [ 50. 0.7]] 

現在我想將浮點值從第二列轉換(那些在數組[:,1])到單位二進制值表示爲1或0整數。我有一個閾值,我想用它作爲邏輯0和邏輯1之間的限制。假設它是1.5。轉換後,陣列應如下所示:

[[ 0. 0 ] 
    [ 10. 0] 
    [ 20. 0] 
    [ 30. 1] 
    [ 40. 0] 
    [ 50. 0]] 

我該如何用最少的努力做到這一點?

+0

爲了把實際的整數值陣列中的(相對於浮'1.0')你有開關到結構化陣列,或者只是把二進制值放在一個單獨的數組中。 – hpaulj

回答

3

將第二列與閾值進行比較,這將是一個布爾數組,然後將其分配回第二列。在分配前,分配會將其上浮爲浮動數據。由此產生的第二列仍然是float,但是由於它需要在那裏維護數據類型,所以其爲0s1s

因此,簡單地做 -

a[:,1] = a[:,1]>1.5 

樣品運行 -

In [47]: a 
Out[47]: 
array([[ 0. , 1. ], 
     [ 10. , 0.4], 
     [ 20. , 1.4], 
     [ 30. , 3. ], 
     [ 40. , 1.1], 
     [ 50. , 0.7]]) 

In [48]: a[:,1] = a[:,1]>1.5 

In [49]: a 
Out[49]: 
array([[ 0., 0.], 
     [ 10., 0.], 
     [ 20., 0.], 
     [ 30., 1.], 
     [ 40., 0.], 
     [ 50., 0.]]) 
+1

更準確的說:'a [:,1]> 1.5'的結果是一個布爾數組,但是賦值會將其轉換爲浮點數。 – Trilarion

+0

@Trilarion對。補充說。 – Divakar

+0

是的,它是一個布爾數組。例如a = a [:, 1]> 1.5會導致[False False False False False]。但是,因爲我需要用這些值進行數學運算,所以我需要它們是整數。但一個[:, 1] = a [:, 1]> 1.5的作品。 – ThoWe

相關問題