Numpy切片和索引

时间:2017-10-02 15:05:47

标签: numpy slice

我有4个numpy数组:time_start,time_stop,time1,pressure。 对于time_start中的每个元素,我想在time1中找到最接近值的索引,然后从那个索引中读取压力值

同样,对于time_stop中的每个元素,我想在time1中找到最接近值的索引,然后读取压力值直到该索引! (time_start和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

如果你能帮助我解决这个问题,那将是非常好的。 非常感谢你:))

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想要这个吗?:

result = [pressure[i] for i in [np.abs(time1 - ts).argmin() for ts in time_start]]

答案 1 :(得分:0)

np.where可能返回数组而不是整数,这使得切片有点困难。返回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]))