2016-12-27 155 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