In [295]: from scipy.signal import argrelextrema
In [296]: Ar = np.array([1,9,96,9,7,4,3,77,0,2,3,4,5])
In [297]: maximas=argrelextrema(Ar, np.greater)
Когда вы спрашиваете об ошибке, вы должны показать все сообщение об ошибке или, по крайней мере, достаточно, чтобы вы и мы знали, где это произошло.Это полезная информация.
In [300]: [int(x) for x in maximas]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-300-0250728a7b76> in <module>
----> 1 [int(x) for x in maximas]
<ipython-input-300-0250728a7b76> in <listcomp>(.0)
----> 1 [int(x) for x in maximas]
TypeError: only size-1 arrays can be converted to Python scalars
Скорее всего, ошибка в вызове int()
, поскольку int
предназначен для возврата одного целого числа либо из строки, либо из числового ввода.,Ошибка указывает, что x
был массивом с более чем одним значением.
Посмотрите на maximas
:
In [301]: maximas
Out[301]: (array([2, 7]),)
Это кортеж, содержащий один массив.Таким образом, итерация для этого кортежа создаст массив.
Мы можем выбрать массив из кортежа с индексированием:
In [302]: maximas[0]
Out[302]: array([2, 7])
In [303]: maximas[0].tolist() # convert it to a list
Out[303]: [2, 7]
In [304]: maximas[0].astype(int).tolist() # ensure it's integers
Out[304]: [2, 7]
Согласно документам, результат argrelextrema
является кортежем,один массив на измерение ввода.Фактически код показывает, что он возвращает np.nonzero(results)
.Чаще мы используем псевдоним np.where(results)
.
Использовать int(x)
не было необходимости.maximas
массивы целочисленные, индексы.
Возможно, вам не нужно конвертировать maximas
в список.Результат np.where
часто можно использовать непосредственно при индексации, например:
In [307]: Ar
Out[307]: array([ 1, 9, 96, 9, 7, 4, 3, 77, 0, 2, 3, 4, 5])
In [308]: Ar[maximas]
Out[308]: array([96, 77])
===
Имейте в виду, что если входной массив 2d, maximas
будеткортеж из 2 элементов.
In [312]: Be = Ar[:12].reshape(6,2) # 2d array
In [313]: argrelextrema(Be, np.greater)
Out[313]: (array([1, 3]), array([0, 1])) # 2 element tuple
In [314]: Be[_] # using the tuple to index Be
Out[314]: array([96, 77])