簡體   English   中英

如何從一個numpy數組浮點數創建一個numpy標簽數組?

[英]How to create an numpy array of labels from a numpy array of float?

例如,我有

arr=np.linspace(0,1,11)

我想標記數字n<0.25標簽"a"n>0.75標簽"c" ,標簽"b"之間的數字。 結果將是

array(['a', 'a', 'a', 'b', ..., 'c'])

我嘗試了像arr[arr<0.25]='a' ,但它只會工作一次,因為在下一個命令中會有與float相比較的字符串。 我可以通過在使用for循環進行比較之前檢查其類型來實現這一點,但它很復雜。 有沒有直接的方法來實現這一目標?

NumPy數組是同類的。 您必須為標簽數組設置類型

import numpy as np
arr=np.linspace(0,1,11)
lbl=np.empty((arr.shape), dtype=object)
lbl[arr<.25]='a'
lbl[(arr>=.25) & (arr <=.75)] = 'b'
lbl[arr>.75]='c'

print arr
print lbl

輸出:

[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9  1. ]
['a' 'a' 'a' 'b' 'b' 'b' 'b' 'b' 'c' 'c' 'c']

要創建三個這樣的組的數組,你可以做這樣的事情 -

ID = (arr>0.75)*1 + (arr>=0.25)
select_arr = np.array(['a','b','c'])
out = select_arr[ID]

樣品運行 -

In [64]: arr # Modified from sample posted in question to include 0.75
Out[64]: 
array([ 0.  ,  0.1 ,  0.2 ,  0.3 ,  0.4 ,  0.5 ,  0.6 ,  0.7 ,  0.75,
        0.9 ,  1.  ])

In [65]: ID = (arr>0.75)*1 + (arr>=0.25)
    ...: select_arr = np.array(['a','b','c'])
    ...: out = select_arr[ID]
    ...: 

In [66]: out
Out[66]: 
array(['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c'], 
      dtype='|S1')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM