2017-10-02 3 views
0

私は4つのnumpy配列を持っています:time_start、time_stop、time1、pressure。 time_startの各要素について、time1に最も近い値のインデックスを見つけて、圧力値を読み取る必要がありますからまでそのインデックス!ナンシースライシングとインデックス付け

同様に、time_stopの各要素について、time1に最も近い値のインデックスを見つけて、圧力値を読み取る必要があります。そのインデックスまで! (時間_とtime_stopの長さが同じ)ここで

は私が書いたものです。その後、

import numpy as np 
def find_nearest(array,value): 
    idx = (np.abs(array-value)).argmin() 
    return array[idx] 

と:: 機能を最も近い値を見つけるために

p = np.zeros(len(time_start), dtype = object) 
itemindex_str = np.zeros(len(time_start), dtype = object) 
itemindex_stp = np.zeros(len(time_start), dtype = object) 

for i in range(0,len(time_start)): 

    itemindex_str =np.where(time1==find_nearest(time1,int(time_start[i]))) 

    itemindex_stp = np.where(time1==find_nearest(time1,int(time_stop[i]))) 

    p[i] = pressure[itemindex_str:itemindex_stp] 

と私を得ますエラー:

Traceback (most recent call last): 
    File "re-written_mobility.py", line 174, in <module> 
    p[i] = pressure[itemindex_str:itemindex_stp] 
TypeError: slice indices must be integers or None or have an __index__ method 

非常にnですあなたが私にこれを解決するのを手伝ってもらえるならば、 はどうもありがとうございました:)

+0

まず、idxを返さないのはなぜですか? 'np.where'はおそらく整数ではなく配列を返し、スライスするのがやや難しくなります。問題は、 'idx' - >' itemindex_str = find_nearest(time1、int(time_start [i])))) 'などを返すことによって回避されます。 – Uvar

+0

あなたは正しいです。それは今解決される。どうもありがとう! :) – user8224662

+0

喜んで助けになるために、私は答えとしてクイックフィックスを追加しました。 :) – Uvar

答えて

0

を?:たいです。問題は、idxを返すことによって回避されます。

def find_nearest(array,value): 
    idx = (np.abs(array-value)).argmin() 
    return idx 
itemindex_str = find_nearest(time1,int(time_start[i])) 
itemindex_stp = find_nearest(time1,int(time_stop[i])) 
0

私はよくあなたの問題を理解している場合、あなたはそれが少し難しいスライスすることができた、これはnp.whereは、おそらく代わりに、整数の配列を返します

result = [pressure[i] for i in [np.abs(time1 - ts).argmin() for ts in time_start]] 
関連する問題