2016-12-27 142 views
0

我有以下情況:從numpy的陣列獲取的索引

我的變量 PARAMS由幾個子值組成:

>> params 
rec.array([ (12.534214167520581, ... 0.7833572386219857, -0.4215128074913047, 3.717773146160369)], 
     dtype=[('const', '<f8'), ('ampl', '<f8'), ('freq', '<f8'), ('phase', '<f8'), ('e_const', '<f8'), ('e_ampl', '<f8'), ('e_freq', '<f8'), ('e_phase', '<f8'), ('stopcrit', '<f8')]) 

不過我只在 AMPL很感興趣和頻率,對他們的價值觀是:

>>params['ampl'] 
array([ 12.53421417, 22.53421417, 21.53421417, ..., 2.53421417, 
    1.53421417, 2.53421417]) 

>>params['freq'] 
array([ 0.78335724, 1.56697824, 4.86322084, ..., 11.45392432, 
    21.17763437, 0.4946571 ]) 

後一些分析,我意識到唯一的價值觀是 ampl 22.53421417 21.53421417

讓我們把這些值 new_array = 22.53421417,21.53421417],我需要的是創建一個新的 PARAMS [ '擴增子'] PARAMS [ '頻率']但只值我息,換言之,減少 PARAMS [ 'AMPL'] PARAMS [ '頻率']到:

params['ampl'] = [22.53421417, 21.53421417] 
params['freq'] = [1.56697824, 4.86322084] 

另外,這些是數據的類型:

>>type(params) 
numpy.recarray  

>>type(params['ampl']) 
numpy.ndarray 

我已經嘗試了幾件事情,使用 .index但只是不工作。提前感謝您的任何建議。

回答

0

假設數組的排序方式使得params['amp'][0]和`params ['freq'] [0]與具有幅度和頻率的奇異對象有關,我們可以執行以下操作。

imp_amp = [22.53421417, 21.53421417] 
for i in imp_amp: 
    loc_in_amp = param['amp'].index(i) #get each values location in amp 
    values_you_want = param['freq'][loc_in_amp] #grab the frequency for that value 
    #do whatever you want with the values. 

一個方便的一行,創建一個新的字典,amp:freq。

n_param = {i:param['freq'][param['amp'].index(i)] for i in imp_amp} 
print n_param 

# {22.53421417: 1.56697824, 
# 21.53421417: 4.86322084} 
+0

非常感謝您的回答,但是當我運行的代碼,我得到我已經收到了同樣的錯誤:回溯(最近通話最後一個): 文件「「,第2行,在 loc_in_amp = params ['ampl']。index(i)#get each value location in amp AttributeError:'numpy.ndarray'對象沒有屬性'index' – FMEZA

+0

您沒有指定您使用的是一個numpy數組。 – TheLazyScripter

+0

提供用於創建數組和傳遞的數據的代碼。 – TheLazyScripter