Подтвердить что ты не робот

TypeError: только целые массивы с одним элементом могут быть преобразованы в индекс 3

У меня есть эта ошибка в заголовке и не знаю, что случилось. Он работает, когда я использую np.hstack вместо np.append, но я бы хотел сделать это быстрее, поэтому используйте append.

time_list список поплавков

height - 1d np.array плавающих

j = 0
n = 30
time_interval = 1200
axe_x = []

while j < np.size(time_list,0)-time_interval:
    if (not np.isnan(heights[j])) and (not np.isnan(heights[j+time_interval])):
        axe_x.append(time_list[np.arange(j+n,j+(time_interval-n))])

 File "....", line .., in <module>
    axe_x.append(time_list[np.arange(j+n,j+(time_interval-n))])

TypeError: only integer arrays with one element can be converted to an index
4b9b3361

Ответ 1

Проблема аналогична ошибке, time_list является обычным списком python и, следовательно, вы не можете индексировать ее с помощью другого списка (если только другой список не является массивом с одним элементом). Пример -

In [136]: time_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]

In [137]: time_list[np.arange(5,6)]
Out[137]: 6

In [138]: time_list[np.arange(5,7)]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-138-ea5b650a8877> in <module>()
----> 1 time_list[np.arange(5,7)]

TypeError: only integer arrays with one element can be converted to an index

Если вы хотите сделать такую ​​индексацию, вам нужно сделать time_list a numpy.array. Пример -

In [141]: time_list = np.array(time_list)

In [142]: time_list[np.arange(5,6)]
Out[142]: array([6])

In [143]: time_list[np.arange(5,7)]
Out[143]: array([6, 7])

Еще одно замечание: в вашем цикле while вы никогда не увеличиваете j, поэтому он может закончиться бесконечным циклом, вы также должны увеличить j на некоторую величину (возможно, time_interval?).


Но согласно требованию, которое вы разместили в комментариях -

axe_x должен быть 1d массивом поплавков, сгенерированных из списка time_list

Вы должны использовать .extend() вместо .append(), .append создаст список массивов для вас. Но если вам нужен 1D-массив, вам нужно использовать .extend(). Пример -

time_list = np.array(time_list)
while j < np.size(time_list,0)-time_interval:
    if (not np.isnan(heights[j])) and (not np.isnan(heights[j+time_interval])):
        axe_x.extend(time_list[np.arange(j+n,j+(time_interval-n))])
        j += time_interval           #Or what you want to increase it by.