2010-04-29 4 views
2

У меня есть Numpy массив, который представляет несколько рентгеновских интервалов функции:NumPy arange с несколькими интервалами

In [137]: x_foo 
Out[137]: 
array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944, 
     945, 946, 947, 948, 949, 950]) 

как вы можете увидеть, в x_foo два интервала: один с 211 до 218, и один из 940 до 950. Это интервалы, которые я хочу интерполировать с помощью scipy. для этого мне нужно настроить интервал, например «211,0 211,1 211,2 ...», который вы бы нормально сделать с:

arange(x_foo[0], x_foo[-1], 0.1) 

в случае нескольких интервалов, это не представляется возможным. так вот, мой вопрос: есть ли многообразный способ сделать это в стиле массива? или мне нужно написать функцию, которая петлиет по всему массиву и разбивается, если разница составляет> 1?

спасибо!

ответ

3
import numpy as np 
x = np.array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944, 
    945, 946, 947, 948, 949, 950]) 
ind = np.where((x[1:] - x[:-1]) > 1)[0] 

даст вам индекс для элемента х, равной 218. Затем два диапазона, которые вы хотите являются:

np.arange(x[0],x[ind],0.1) 

и

np.arange(x[ind+1],x[-1],0.1) 
+0

спасибо за ваш ответ, но это не совсем то, что им нужно. Я думал, что это решение может быть связано с этим решением. Сейчас я использую равный подход. Спасибо, в любом случае! –

+0

Тогда, я думаю, я не понял, какой ответ вы искали. Можете ли вы немного рассказать о том, какой ответ вы ищете? –

0
np.r_[ 211:218+1, 940:950+1 ] 
array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950]) 

r_[] делает строку из скаляров, диапазонов, массивов, списков, кортежей ...; Я думаю, r_ не подходит для row. Для документа, см. np.r_? в Ипиотоне.
(Python ручки 211: 218 внутри квадратных скобок, но не круглые, следовательно r_[] нет ()).