argwhere().flatten
не имеет смысла:
In [100]: x = np.arange(6).reshape(2,3)
In [101]: x
Out[101]:
array([[0, 1, 2],
[3, 4, 5]])
In [102]: x>1
Out[102]:
array([[False, False, True],
[ True, True, True]])
In [103]: np.where(x>1)
Out[103]: (array([0, 1, 1, 1]), array([2, 0, 1, 2]))
where
возвращает индексный кортеж, такой что: x[np.where(x>1)]
works
argwhere
- транспонирование where
- массив пар индекса (для 2d):
In [104]: np.argwhere(x>1)
Out[104]:
array([[0, 2],
[1, 0],
[1, 1],
[1, 2]])
flatten
смешивает значения из двух измерений
In [105]: np.argwhere(x>1).flatten()
Out[105]: array([0, 2, 1, 0, 1, 1, 1, 2])
2 получены из результатов 2-гоизмерение (размер 3) и не работает при применении к 1-му измерению (размер 2).
Что вы пытаетесь сделать с этим flatten
?
Вфрагмент кода большего размера, y
- это массив 1d (data[:,2]
).Там argwhere/flatten
работает, но излишне сложно.
In [106]: x
Out[106]:
array([[0, 1, 2],
[3, 4, 5]])
In [107]: y = x[:,1]
In [108]: np.where(y>1)
Out[108]: (array([1]),) # as single element tuple
In [109]: np.argwhere(y>1)
Out[109]: array([[1]]) # a (1,1) shape array
In [110]: np.argwhere(y>1).flatten()
Out[110]: array([1]) # a (1,) shape array
, но мы получаем то же самое, просто извлекая один элемент из кортежа:
In [111]: np.where(y>1)[0]
Out[111]: array([1])